Oracle如何實現多個欄位去重
我們通常使用distinct關鍵字來去除重複記錄,還有沒有其他辦法呢?透過查詢資料,確認group by也可以,利用rowid也可以實現功能。其中,group by是用來分組統計的,能用distinct的地方就不要用group by。下面我們看一下幾種方法具體如何實現,至於選用哪一種,主要還是看需求,實現功能是最主要的。
首先我們建立測試表hoegh,插入3條記錄。我們可以看到,就前兩個欄位而言,第二條記錄和第三條記錄是重複的。
使用DISTINCT去重
如下:
使用group by去重
gruop by是Oracle中常用的分組函式,我們看一下如何使用group by來實現去重功能。
我們需要將重複記錄刪掉,拿hoegh表來說,我們需要保留h3列值最大的那一行記錄,我們可以透過下面語句來實現。
使用rowid去重
ROWID是資料的詳細地址,透過rowid,oracle可以快速的定位某行具體的資料的位置。透過下面的語句,可以保留重複記錄中的最新一條記錄(即最後插入的那條記錄)。
首先我們建立測試表hoegh,插入3條記錄。我們可以看到,就前兩個欄位而言,第二條記錄和第三條記錄是重複的。
點選(此處)摺疊或開啟
-
SQL>
-
SQL> create table hoegh(h1 number,h2 number,h3 number);
-
-
Table created
-
SQL> insert into hoegh values(1,1,1);
-
-
1 row inserted
-
SQL> insert into hoegh values(2,2,2);
-
-
1 row inserted
-
SQL> insert into hoegh values(2,2,8);
-
-
1 row inserted
-
SQL> commit;
-
-
Commit complete
-
-
SQL> select * from hoegh;
-
-
H1 H2 H3
-
---------- ---------- ----------
-
1 1 1
-
2 2 2
-
2 2 8
-
- SQL>
使用DISTINCT去重
如下:
點選(此處)摺疊或開啟
-
SQL>
-
SQL> select distinct h1,h2 from hoegh;
-
-
H1 H2
-
---------- ----------
-
1 1
- 2 2
-
- SQL>
使用group by去重
gruop by是Oracle中常用的分組函式,我們看一下如何使用group by來實現去重功能。
點選(此處)摺疊或開啟
-
SQL>
-
SQL> select h1,h2 from hoegh group by(h1,h2);
-
-
H1 H2
-
---------- ----------
-
1 1
-
2 2
-
- SQL>
點選(此處)摺疊或開啟
-
SQL>
-
SQL> delete from hoegh
-
2 where h3 not in (select max(h3) from hoegh group by h1,h2);
-
-
1 row deleted
-
-
SQL> commit;
-
-
Commit complete
-
-
SQL> select * from hoegh;
-
-
H1 H2 H3
-
---------- ---------- ----------
-
1 1 1
-
2 2 8
-
- SQL>
ROWID是資料的詳細地址,透過rowid,oracle可以快速的定位某行具體的資料的位置。透過下面的語句,可以保留重複記錄中的最新一條記錄(即最後插入的那條記錄)。
點選(此處)摺疊或開啟
-
SQL>
-
SQL> delete from hoegh
-
2 where rowid not in
-
3 (select max(rowid) from hoegh group by(h1,h2));
-
-
1 row deleted
-
-
SQL> commit;
-
-
Commit complete
-
-
SQL>
-
SQL> select * from hoegh;
-
-
H1 H2 H3
-
---------- ---------- ----------
-
1 1 1
-
2 2 8
-
- SQL>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30162081/viewspace-1610737/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL多列欄位去重的案例實踐MySql
- mysql多表多欄位查詢並去重MySql
- 如何實現陣列去重?陣列
- 查詢/刪除重複的資料(單個欄位和多個欄位條件)
- oracle:聯表更新多個欄位的值Oracle
- ORACLE多欄位CASE WHENOracle
- C# 實現list=list.OrderBy(q=>q.欄位名).ToList(); 按多個欄位排序C#排序
- sql根據多個欄位查詢重複記錄SQL
- 快排實現仿order by多欄位排序排序
- MySQL簡單實現多欄位模糊查詢MySql
- 將多個JSON欄位對映到單個Java欄位JSONJava
- 多個下拉去重,jQuery實現jQuery
- vue實現多個下拉去重Vue
- mysql sql同一個欄位多個行轉成一個欄位查詢MySql
- LINQ 按多個欄位排序排序
- oracle goldengate實現欄位插入時間值OracleGo
- oracle小知識點4--利用將欄位拆分成多個屬性實現order by複雜排序Oracle排序
- JS實現陣列去重JS陣列
- MySql Order By 多個欄位 排序規則MySql排序
- 在後端中如何實現冪等和去重?後端
- SQL Server中根據某個欄位,ID欄位自動增長的實現SQLServer
- 巧用欄位對映實現指定欄位的搜尋
- oracle複合索引介紹(多欄位索引)Oracle索引
- JS陣列去重 包含去除多個 NaNJS陣列NaN
- mySql刪除多個表 刪除多個欄位的SQLMySql
- SQL字元型欄位按數字型欄位排序實現方法SQL字元排序
- JS陣列去重的實現JS陣列
- map/reduce實現資料去重
- PHP陣列多個欄位分別排序PHP陣列排序
- oracle刪除表欄位和oracle表增加欄位Oracle
- oracle中如何指定表欄位自增Oracle
- 怎樣Oracle把多條記錄的相同欄位拼成一個字串Oracle字串
- sql 統計多個欄位的和(如果欄位中含有 null 的處理)SQLNull
- 如何在MySQL中實現替換欄位部分內容MySql
- Laravel 實現多欄位登陸(超簡單,叫你如何不動腦子完成任務)Laravel
- Laravel 多條件去重Laravel
- SQL 如何查詢每個分組都出現的欄位值SQL
- 7種方法實現陣列去重陣列