首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL 找出重複鍵值記錄:GROUP BY + HAVING 技巧

     編輯:關於SqlServer

需找出資料表中某欄位 (或多欄位組合) 出現超過一次的記錄,標準做法是 GROUP BY 配合 HAVING COUNT(*) > 1。

基本語法

SELECT 欄位1, 欄位2, COUNT(*) AS 重複次數
FROM 資料表
GROUP BY 欄位1, 欄位2
HAVING COUNT(*) > 1;

實務範例

資料表 A 欄位:編號, 經度, 緯度, 位置, 名稱, 時間。欲找出 經度+緯度 組合重複的記錄:

SELECT DISTINCT (經度 + 緯度) AS 統一編號, COUNT(*) AS RecordCount
FROM A
GROUP BY (經度 + 緯度)
HAVING COUNT(*) > 1;

進階:取得完整重複記錄明細

-- 使用 CTE 或子查詢
WITH DupKeys AS (
  SELECT 經度, 緯度
  FROM A
  GROUP BY 經度, 緯度
  HAVING COUNT(*) > 1
)
SELECT A.*
FROM A
JOIN DupKeys DK ON A.經度 = DK.經度 AND A.緯度 = DK.緯度
ORDER BY A.經度, A.緯度;

效能提示

  • 被分組欄位上建立索引可大幅加速 GROUP BY。
  • 若資料量極大,考慮先抽樣或分區處理。
  • DISTINCT 在外層查詢中可移除(GROUP BY 已保證唯一),但保留亦無害。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved