在MySQL中,如果查询结果包含重复数据,可以通过多种方式实现去重。最常用的方法是使用 DISTINCT 关键字,也可以结合 GROUP BY 子句来达到目的。下面介绍几种常见的去重实现方法。
DISTINCT 去重
当需要去除某列或多个列的重复值时,可以使用 DISTINCT。它会返回唯一不同的记录。
对单列去重:获取某一列的不重复值。SELECT DISTINCT column_name FROM table_name;
对多列去重:只有当多个字段组合完全相同时才会去重。SELECT DISTINCT col1, col2 FROM table_name;
GROUP BY 实现去重
GROUP BY 通常用于分组统计,但也能实现去重效果,尤其适合需要配合聚合函数(如 COUNT、MAX 等)的场景。
按字段分组,每组只显示一行,达到去重目的。SELECT col1, col2 FROM table_name GROUP BY col1, col2;
可结合聚合函数获取更多信息,比如每组的记录数。SELECT col1, COUNT(*) FROM table_name GROUP BY col1;
去重并保留一条完整记录(如按ID最小)
有时表中存在完全重复的行,或想根据某个字段去重但保留一条完整记录,可以使用子查询或窗口函数(MySQL 8.0+)。
使用子查询和 MIN(ID) 去重:SELECT * FROM table_name t1 WHERE id = (SELECT MIN(id) FROM table_name t2 WHERE t2.key = t1.key);
使用 ROW_NUMBER() 窗口函数(推荐处理大数据量):SELECT * FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY key_col ORDER BY id) AS rn FROM table_name) t WHERE rn = 1;
基本上就这些常用方法。DISTINCT 最简单直接,适合简单去重;GROUP BY 更灵活,支持统计;复杂场景建议用窗口函数。选择哪种方式取决于你的数据结构和去重要求。
