SELECTDISTINCT test_id FROM test;-- 單字段去重SELECTCOUNT(DISTINCT test_id)FROM test;-- 去重計數
1.2 GROUP BY子句
方法:分組后取唯一值,常配合子查詢統計總數。
優勢:
效率較高:單字段去重時比DISTINCT更快。
?支持聚合:可結合COUNT、MAX等函數。
劣勢:
結果不穩定:非GROUP BY字段可能返回隨機值(MySQL特有)。
?復雜度高:多字段分組時計算資源消耗大。
SELECT test_id FROM test GROUPBY test_id;SELECTCOUNT(test_id)FROM(SELECT test_id FROM test GROUPBY test_id) tmp;
1.3 UNION系列操作
方法:合并多表數據自動去重,需注意性能問題。
?優勢:適合跨表數據合并場景。
劣勢:
資源消耗大,UNION去重需全局排序,大數據量性能差。
-- UNION自動去重,性能低 SELECT test_id FROM test_2023
UNIONSELECT test_id FROM test_2024-- UNION ALL + DISTINCT分階段處理 SELECTDISTINCT user_id FROM(SELECT user_id FROM orders_2023 UNIONALLSELECT user_id FROM orders_2024) tmp;
1.4 子查詢 + 自關聯
方法:通過條件排除重復記錄,保留特定行。
優勢:精準控制保留邏輯(如保留時間最新的記錄)。
劣勢:
性能差:嵌套查詢復雜度高,不適合大規模數據。
SELECT*FROM test t1
WHERENOTEXISTS(SELECT1FROM test t2 WHERE t1.test_id = t2.test_id AND t1.time< t2.time);
-- UNION自動去重SELECT user_id FROM user_1 UNIONSELECT user_id FROM user_2;-- UNION ALL + DISTINCT分階段處理SELECTDISTINCT user_id FROM(SELECT user_id FROM user_1 UNIONALLSELECT user_id FROM user_2) tmp;