sql去除重復記錄有5種常用方法:distinct關鍵字,返回查詢結果中的唯一記錄;group by子句,分組并僅返回每個組中不重復的記錄;union all和distinct,合并多個查詢結果并去除重復記錄;not in子查詢,從一個表中去除與另一個表中重復的記錄;cte(公共表表達式),使用 row_number() 函數分配唯一序號來去除重復記錄。
SQL 中去除重復記錄的方法
在 SQL 中去除重復記錄是一種常見需求,可以提高數據質量和性能。這里介紹幾種常用的方法:
1. DISTINCT 關鍵字
DISTINCT 關鍵字用于返回查詢結果中的唯一(不重復)記錄。它可以與其他關鍵字一起使用,例如 SELECT、FROM 和 WHERE。
SELECT DISTINCT column_name FROM table_name;
登錄后復制
2. GROUP BY 子句
GROUP BY 子句將查詢結果分組,并僅返回每個組中不重復的記錄??梢越Y合聚合函數(例如 COUNT、SUM)使用。
SELECT column_name, COUNT(*) AS count FROM table_name GROUP BY column_name;
登錄后復制
3. UNION ALL 和 DISTINCT
UNION ALL 運算符將多個查詢結果合并為一個結果集。結合 DISTINCT 可以去除重復記錄。
SELECT * FROM table_name UNION ALL SELECT * FROM table_name2 DISTINCT;
登錄后復制
4. NOT IN 子查詢
NOT IN 子查詢可以從一個表中去除與另一個表中記錄重復的記錄。
SELECT * FROM table_name WHERE column_name NOT IN (SELECT column_name FROM other_table);
登錄后復制
5. CTE(公共表表達式)
CTE 是一種臨時表,可以在查詢中多次引用。可以使用 ROW_NUMBER() 函數為每一行分配一個唯一序號,然后使用它來去除重復記錄。
WITH RankedData AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY column_name ORDER BY id) AS row_num FROM table_name ) SELECT * FROM RankedData WHERE row_num = 1;
登錄后復制
選擇合適的方法
選擇哪種方法取決于數據集和查詢的具體要求。對于較小的數據集,DISTINCT 關鍵字或 GROUP BY 子句通常就足夠了。對于較大的數據集,CTE 或 NOT IN 子查詢可能更有效。