题解 | #查询结果去重#

查询结果去重

https://www.nowcoder.com/practice/82ebd89f12cf48efba0fecb392e193dd

主要区别

1. 设计目的不同

  • DISTINCT: 专门用于去除重复行,返回唯一值
  • GROUP BY: 用于分组聚合,去重只是其副作用

2. 语法要求不同

你提到的"有几个字段就要跟几个字段"是正确的:

-- DISTINCT: 简单直接
SELECT DISTINCT university FROM user_profile;

-- GROUP BY: 必须包含所有非聚合字段
SELECT university FROM user_profile GROUP BY university;

-- 如果有多个字段,GROUP BY 必须包含所有非聚合字段
SELECT DISTINCT university, city FROM user_profile;
SELECT university, city FROM user_profile GROUP BY university, city;

3. 聚合函数支持

  • GROUP BY 可以配合聚合函数使用
  • DISTINCT 不能直接配合聚合函数(除了 COUNT(DISTINCT column)
-- GROUP BY 的典型用法
SELECT university, COUNT(*) as student_count, AVG(age) as avg_age
FROM user_profile 
GROUP BY university;

-- DISTINCT 无法实现上述功能
-- 这样写是错误的:
-- SELECT DISTINCT university, COUNT(*) FROM user_profile;

4. 性能差异

  • 简单去重场景: DISTINCT 通常性能更好,语义更清晰
  • 需要聚合计算: 必须使用 GROUP BY

5. 执行计划

虽然在简单去重时两者可能产生相似的执行计划,但:

  • DISTINCT 明确表达了"去重"意图
  • GROUP BY 表达了"分组"意图

你的例子分析

-- 推荐写法(语义清晰,性能可能更好)
SELECT DISTINCT university FROM user_profile;

-- 虽然结果相同,但不够直观
SELECT university FROM user_profile GROUP BY university;

最佳实践

  1. 只需要去重 → 使用 DISTINCT
  2. 需要分组聚合 → 使用 GROUP BY
  3. 代码可读性 → 选择语义更明确的写法
#你的国庆怎么过#
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务