首页/数据/SQL 速查/DISTINCT 与 GROUP BY 去重的等价关系
本包目录(311 条)
查询基础33 条连接与子查询40 条
聚合与窗口函数54 条
函数速查60 条变更与事务52 条性能与执行计划72 条

DISTINCT 与 GROUP BY 去重的等价关系

SELECT DISTINCT a, b 与 SELECT a, b ... GROUP BY a, b 在结果层等价;需要附加聚合时用 GROUP BY 更自然。

SQL 速查数据更新于 2026-10-12

等价示例

等价示例
SELECT DISTINCT city, status FROM users;

-- 等价
SELECT city, status FROM users GROUP BY city, status;
结果两者都去重组合
扩展GROUP BY 可加聚合列,DISTINCT 不能
NULL两者都把多个 NULL 视为同一组

易错点

  • 对多列去重时两者都需要同样的列集合,混用易造成“以为去重了其实没有”
  • 从 DISTINCT 改写为 GROUP BY 后注意 ONLY_FULL_GROUP_BY 对选择列的限制

数据来源与参考

  • MySQL 8.0 Reference Manual · DISTINCT Optimization
  • PostgreSQL Documentation · SELECT DISTINCT
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌