資料品質檢核時,最常見的需求就是「這個欄位有沒有重複值?」Oracle 只要一行 GROUP BY 配合 COUNT(*) 即可秒出結果,並能統計每個值重複幾次。
SELECT 欄位A, COUNT(*)
FROM 表名
GROUP BY 欄位A;
COUNT(*) = 1:該值唯一,無重複。COUNT(*) > 1:該值重複,數字即為重複筆數。假設欄位 A 的資料為 9, 7, 1, 2, 3, 9, 7, 1,查詢結果如下圖:
圖中可見 9、7、1 各出現 2 次,2、3 各出現 1 次。
若只想列出有重複的值,加上 HAVING 子句:
SELECT 欄位A, COUNT(*) AS dup_cnt
FROM 表名
GROUP BY 欄位A
HAVING COUNT(*) > 1
ORDER BY dup_cnt DESC;
GROUP BY 才能走 Index Full Scan 避免 Full Table Scan。EXISTS 寫法搭配 ROWNUM = 1 提早終止掃描。