oracle中去重複記錄 不用distinct
用distinct關鍵字只能過濾查詢欄位中所有記錄相同的(記錄集相同),而如果要指定一個欄位卻沒有效果,另外distinct關鍵字會排序,效率很低 。
select distinct name from t1 能消除重複記錄,但只能取一個欄位,現在要同時取id,name這2個欄位的值。
select distinct id,name from t1 可以取多個欄位,但只能消除這2個欄位值全部相同的記錄
所以用distinct達不到想要的效果,用group by 可以解決這個問題。
例如要顯示的欄位為A、B、C三個,而A欄位的內容不能重複可以用下面的語句:
select A, min(B),min(C),count(*) from [table] where [條件] group by A
having [條件] order by A desc
為了顯示標題頭好看點可以把select A, min(B),min(C),count(*) 換稱select A as A, min(B) as B,min(C) as C,count(*) as 重複次數
顯示出來的欄位和排序欄位都要包括在group by 中
但顯示出來的欄位包有min,max,count,avg,sum等聚合函式時可以不在group by 中
如上句的min(B),min(C),count(*)
一般條件寫在where 後面
有聚合函式的條件寫在having 後面
如果在上句中having加 count(*)>1 就可以查出記錄A的重複次數大於1的記錄
如果在上句中having加 count(*)>2 就可以查出記錄A的重複次數大於2的記錄
如果在上句中having加 count(*)>=1 就可以查出所有的記錄,但重複的只顯示一條,並且後面有顯示重複的次數----這就是所需要的結果,而且語句可以通過hibernate
下面語句可以查詢出那些資料是重複的:
select 欄位1,欄位2,count(*) from 表名 group by 欄位1,欄位2 having count(*) > 1
將上面的>號改為=號就可以查詢出沒有重複的資料了。
例如 select count(*) from (select gcmc,gkrq,count(*) from gczbxx_zhao t group by gcmc,gkrq having
count(*)>=1 order by GKRQ)
select * from gczbxx_zhao where viewid in ( select max(viewid) from gczbxx_zhao group by
gcmc ) order by gkrq desc ---還是這個可行。
有一面試題說:distinct去重複的效率很底下,我在網上看到這遍文章的方法好像說是用 group by having 效率很高了?
我在了一個測試,有一商品表,26萬條記錄,只有商品編號建了索引,對品牌名稱欄位做 distinct
select brand,count(*) from tab_commbaseinfo group by brand having count(*) =1
平均時間是:0.453
select distinct brand from tab_commbaseinfo
平均時間是:0.39
搞不懂是否還有其它方法。
相關推薦
oracle中去重複記錄 不用distinct
用distinct關鍵字只能過濾查詢欄位中所有記錄相同的(記錄集相同),而如果要指定一個欄位卻沒有效果,另外distinct關鍵字會排序,效率很低 。 select distinct name from t1 能消除重複記錄,但只能取一個欄位,現在要同時取id,name這2
oracle中怎樣排除重複記錄--通過distinct來實現
distinct這個關鍵字來過濾掉多餘的重複記錄只保留一條,但往往只用 它來返回不重複記錄的條數,而不是用它來返回不重記錄的所有值。其原因是distinct只有用二重迴圈查詢來解決,而這樣對於一個數據量非常大的站來說,無疑是會直接影響到效率的。 下面先來看看例子: tabl
Oracle 查看錶中重複的記錄,以及去除表中的重複記錄
--查看錶中重複的記錄 select tscw.L_SEC_KEY as L_BOND_KEY ,---債券內碼 to_date(twcb.b_info_carrydate,'yyyyMMdd') as D_BEGIN,--計息起始日
mysql中刪除重複記錄,並保留重複資料中的一條資料的SQL語句理解
正好想寫一條刪除重複語句並保留一條資料的SQL,網上查了一部分資料寫的很詳細,但還是在這裡寫下自己的理解,以遍後續學習 。如下: 表字段和資料: SQL語句: DELETE FROM `user` WHERE id NOT IN(SELECT * FROM(
mysql 資料表中查詢重複記錄
1、單個欄位 查詢所有重複資料 select * from ActivityWinUser where (UID) in(select UID from ActivityWinUser group by UID having count(*)>1); 去重 delete from table w
mysql中去除重複資料之distinct用法
最近利用郭神的litepal建立了郵件客戶端的前端資料庫,然後實現最近聯絡人的顯示,需要在資料庫裡去查詢傳送人的暱稱和傳送人的地址兩個欄位,但發現litepal不支援distinct查詢,但可以通過原生的sql語句實現: select distinct fromaddress,fromname
java-ArrayList中去重複字串或重複物件、LinkedList集合、泛型、增強for、靜態匯入、可變引數、asList()方法、集合巢狀
1、去除ArrayList中重複字串元素方式 * A:案例演示 * 需求:ArrayList去除集合中字串的重複值(字串的內容相同) * 思路:建立新集合方式 /** * A:案例演示 * 需求:ArrayList去除集合中字串的重複值(字串的內容相同)
ORACLE查詢刪除重複記錄三種方法
比如現在有一人員表 (表名:peosons) 若想將姓名、身份證號、住址這三個欄位完全相同的記錄查詢出來 複製程式碼程式碼如下: select p1.* from persons p1,persons p2 where p1.id<>p
刪除表中的重複記錄
5、查詢表中多餘的重複記錄(多個欄位),不包含rowid最小的記錄 select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*)
Oracle 快速刪除重複記錄
1. delete from DJ_SKSKJ where rowid in (select max(rowid) from DJ_SKSKJ where jddm = '01'
只使用一條sql語句,刪除表中的重複記錄
一個表,表1,ref(唯一值),type(有重複)如何去掉重複記錄。 建表sql語句: -- ---------------------------- -- Table structure for `deletechongfu` -- -------------------
刪除SQL2000資料表中的重複記錄
有兩個意義上的重複記錄,一是完全重複的記錄,也即所有欄位均重複的記錄,二是部分關鍵欄位重複的記錄,比如Name欄位重複,而其他欄位不一定重複或都重複可以忽略。 1、對於第一種重複,比較容易解決,使用 select distinct * from tableName 就可以得到
Oracle 中去除重複資料
在網上查了一下,去除重複資料有兩種情況: 1、部分欄位重複,對於這種情況可這樣做: (1)create table 臨時表 as select a.欄位1,a.欄位2,MAX(a.ROWID) dataid from 正式表 a GROUP BY a.欄位1,a.欄位2;
db2中刪除重複記錄的sql語句
1、查詢表中多餘的重複記錄,重複記錄是根據單個欄位(peopleId)來判斷 select * from people where peopleId in (select peopleId from people group by peopleId having coun
如何刪除表中的重複記錄?
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script type="text/
聯合主鍵 去重複記錄的方法
方法1、 就是將三個欄位連線起來作為主鍵,進行資料是否重複的判斷。這裡值得注意的是某列的值可能為空,所以要賦一個空字串過去: select * from t1 where nvl(col1,'')|| nvl(col2,'')|| col3 not in (select col1||col2||col3 fr
jquery中去重複排序(函式: $.grep() join() sort() )
var str = '12345678543'; var array = str.split ("");//分割為陣列 console.log (array); //去除陣列中重
Oracle中的多記錄新增和mysql不同
在MySQL中我們用的是insert into security_role_org_resource values(1201,82001), (1201, 82001)而同樣的語句中放到Oracle中確實錯的,但可以使用這樣的語句插入多條insert all into sec
JS(ES6)去除陣列中的重複記錄
1.雙層迴圈,外層迴圈元素,內層迴圈時比較值;如果有相同的值則跳過,不相同則push進陣列 // formatConcatArr(array)==[ 1, 23, 2, 3 ] formatConcatArr(array)=={{formatConcatArr([1,
關於mysql中刪除重複記錄,並保留重複資料中的一條資料的SQL語句理解
正好想寫一條刪除重複語句並保留一條資料的SQL,網上查了一部分資料寫的很詳細,但還是在這裡寫下自己的理解,以遍後續學習 。如下: 表字段和資料: SQL語句: DELETE FROM `user` WHERE id NOT IN(SELECT * FROM(SELE