在 SQL 查询中,实现去重有哪些常用方法?DISTINCT 关键字与 GROUP BY 子句在去重场景下有何区别?
考察说明
考查对 SQL 去重基础语法的掌握,以及 DISTINCT 与 GROUP BY 在去重逻辑和使用场景上的差异理解。
回答思路
- 【回答框架 1】SQL 去重最直接的方法是使用 DISTINCT 关键字,它作用于 SELECT 的所有列,将完全相同的行合并为一行,常用于查询结果去重。
- 【回答框架 2】GROUP BY 子句按指定列分组,常配合聚合函数使用,但也可以仅用于去重,例如 SELECT col1, col2 FROM table GROUP BY col1, col2 能达到与 DISTINCT 相同的效果。
- 【回答框架 3】两者的核心区别在于:DISTINCT 语义简单,只保留唯一值;GROUP BY 能生成分组统计信息,如 COUNT、SUM 等,同时分组本身也实现了去重,并且可以结合聚合函数为每组返回汇总值。
- 【回答框架 4】性能方面,对于简单去重,DISTINCT 通常更直观,但某些数据库中对大表 GROUP BY 可能利用索引更高效,实际需根据执行计划和数据分布评估。
- 【回答框架 5】使用 GROUP BY 去重时,SELECT 的列必须都在 GROUP BY 子句中或包含在聚合函数内,这限制了查询灵活性;而 DISTINCT 则无需此限制。
- 【关键点 1】DISTINCT 直接去除重复行,GROUP BY 按列分组自然去重。
- 【关键点 2】GROUP BY 支持聚合函数,DISTINCT 不支持。
- 【关键点 3】SELECT 非分组列时,GROUP BY 有语法限制,DISTINCT 没有。
- 【关键点 4】同等语义下,性能从执行计划判断,不能简单断言哪个更快。
- 【易错点 1】不要认为 DISTINCT 只对第一列去重,它实际作用于所有选取列的组合。
- 【易错点 2】GROUP BY 去重时 SELECT 列未严格分组会导致语法错误。
- 【易错点 3】不去比较两者性能,需结合索引和实际数据量。