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;