SQL面试题更新 2026-08-03

在 SQL 查询中,实现去重有哪些常用方法?DISTINCT 关键字与 GROUP BY 子句在去重场景下有何区别?

考察说明

考查对 SQL 去重基础语法的掌握,以及 DISTINCT 与 GROUP BY 在去重逻辑和使用场景上的差异理解。

回答思路

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