Oracle根據多列去重

(1)distinct

關鍵詞 distinct用於返回唯一不同的值,可作用於單列和多列

但必須將其放在開頭,否則會提示錯誤
在這裏插入圖片描述
而若在其後添加多個變量名,則返回的將是這多個變量名不同時重複的列,因而使用distinct篩選某字段不重複記錄時無法同時得到其他的信息。

此時可以採用group by函數

(2)group by

與聚合函數聯用可以在取多個字段的同時去重其中一個字段

例如要顯示的字段爲A、B、C三個,而A字段的內容不能重複,可以如下語句:

select A, max(B), max(C), count(*) 重複次數 from [table] 
where [條件] group by A having count(*) >= (int n);

如果在上句中having加 count()>1,就可以查出記錄A所有有重複的記錄;

count()>=1 就可以查出所有的記錄,但重複的只顯示一條,並且後面有顯示重複的次數。

推薦使用:

SELECT * FROM t1  WHERE ROWID IN (SELECT MAX(ROWID) FROM t1 GROUP BY id, name;

上式可以對擁有相同id和name的數據進行去重。

ROWID是ORACLE中的一個重要的概念。用於定位數據庫中一條記錄的一個相對唯一地址值。通常情況下,該值在該行數據插入到數據庫表時即被確定且唯一。

ROWID是一個僞列,並不實際存在於表中。它是ORACLE在讀取表中數據行時,根據每一行數據的物理地址信息編碼而成的一個僞列。所以根據一行數據的ROWID能找到一行數據的物理地址信息。從而快速地定位到數據行。數據庫的大多數操作都是通過ROWID來完成的,而且使用ROWID來進行單記錄定位速度是最快的。

ROWID採用64進制編碼:A ~ Z表示0到25;a ~ z表示26到51;0 ~ 9表示52到61;+表示62;/ 表示63;一共64個字符。

查看ROWID:

SELECT A.*, ''||A.ROWID FROM STUINFO A;

在這裏插入圖片描述
表格數據的構建見文章末尾

將同班、同名的信息進行去重:

SELECT * FROM STUINFO WHERE ROWID IN (SELECT MIN(ROWID) FROM STUINFO WHERE CLASSNO IS NOT NULL
GROUP BY STUID, STUNAME )  ORDER BY STUID;

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章