MySQL GROUP BY用法详解:结合DELETE删除重复数据

花开有时
花开有时
发布时间:2026-10-13 | 4人浏览过
原创

在处理数据库重复数据时,GROUP BY 不仅是统计分组的工具,更是精准定位与剔除冗余记录的关键手段。本文将结合实际建表、插入测试数据及执行删除操作的完整流程,教你利用 GROUP BY 结合最大ID过滤法,安全高效地清理 MySQL 中的重复行。

准备环境与测试数据

为了清晰展示 GROUP BY 在去重中的应用,我们首先构建一个包含重复风险的测试表,并填充基础数据。

第1步:创建测试表结构

目的:建立一张模拟业务场景的表,包含主键、名称、班级及分数字段。
操作:

create table test_group(id int auto_increment primary key, name varchar(32), class varchar(32), score int);

查看表结构以确认字段定义是否生效:

desc test_group

第2步:插入初始测试数据

目的:初始化一批非重复数据,用于后续对比。
操作:插入几条正常的学生记录。

理解 GROUP BY 的分组行为

在使用 GROUP BY 前,需明确其核心逻辑:它将具有相同值的行合并为一组,并通常只返回每组的一个代表值。若选择列未在 GROUP BY 中且未被聚合函数处理,结果将是不确定的(取决于 SQL 模式配置)。

第3步:尝试获取各班最高分(观察潜在问题)

目的:直观感受按班级分组后,其他列(如姓名)的取值情况。
操作:

select name, class , max(score) from test_group group by class;

注意:虽然查询出了每个班级的最高分,但对应的 name 可能并非该最高分的持有者。这说明直接对未聚合列使用 GROUP BY 无法保证数据的完整性关联,因此需要引入辅助策略来处理更复杂的“重复数据删除”需求。

实战:利用 GROUP BY 删除重复数据

假设表中出现了多条姓名相同的重复记录(例如新录入的数据未做唯一性检查)。我们的目标是:**保留 ID 最大的那条记录(视为最新/最可靠),删除其余所有重复项**。

第4步:制造并识别重复数据

目的:模拟数据污染场景。
操作:插入一条重复姓名的记录。

insert into test_group(name, class, score) values('repeat','B',89);

接下来,我们需要找出哪些名字是重复的,以及它们在重复组中的“最大值”(即我们要保留的ID)。

第5步:查询每组应保留的最大 ID

目的:确定每一组重复数据中,哪一行应该被保留。
操作:按名称分组,选出每组的最大ID作为标记。

select name, class, max(id) as max_id from test_group group by name;

第6步:构造保留记录的 ID 列表

目的:提取出所有“合法”不重复记录的 ID 集合,供后续删除操作使用。
关键思路:DELETE` 时不能直接 `IN (SELECT ... FROM 同表)`,因为 MySQL 不允许在执行 DELETE 的同时 SELECT 同一张表。因此需要使用双重嵌套或临时视图思维。
操作:

select max_id from (select name, class, max(id) as max_id from test_group group by name) b;

第7步:执行删除操作前的备份检查

警告:涉及删除操作前务必确认范围!
建议先执行全表查询,肉眼核对当前数据状态及即将受影响的数据量。

select * from test_group;

第8步:执行真正的删除语句

目的:剔除不在上述 max_id 列表中的记录,从而只保留每组最新的记录。
操作:

delete from test_group where id not in (select max_id from (select name, class, max(id) as max_id from test_group group by name)b);

完成判断与总结

执行完毕后,再次运行 select * from test_group; 检查结果。如果所有重复的 name 都只剩下一条记录,且其 id 是该组中最大的数字,则说明删除操作成功。

以上就是 MySQL GROUP BY 用法详解并结合实际场景删除重复数据的详细内容,更多关于 SQL 数据处理技巧与数据库性能优化的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表