分组和过滤

MySQL 数据库学习笔记(续)

四、DQL 数据查询语言

4.8 分组和过滤

-- =================== 分组和过滤 ==================== --

-- 查询不同课程的平均分,最高分,最低分,平均分大于80
-- 核心:根据不同的课程分组

SELECT subjectname 课程名,AVG(studentresult) 平均分,MAX(studentresult) 最高分,MIN(studentresult) 最低分
FROM result r
INNER JOIN `subject` sub
ON r.subjectno = sub.subjectno
GROUP BY  r.subjectno -- 通过什么字段来分组
HAVING AVG(studentresult) >=80

核心知识点

1. 分组 GROUP BY

  • 作用:将相同类型的数据分到一组,进行统计计算
  • 使用场景:统计、汇总(求平均分、总分、人数、最大值、最小值)
  • 语法GROUP BY 分组字段

2. 过滤 HAVING

  • 作用:对分组后的结果进行过滤
  • 与 WHERE 的区别
    • WHERE分组前 过滤原始数据
    • HAVING分组后 过滤分组结果
  • 使用场景:对聚合函数(AVG、MAX、MIN、COUNT、SUM)结果进行判断时必须用 HAVING

3. 常用聚合函数

  • AVG(字段) → 平均值
  • MAX(字段) → 最大值
  • MIN(字段) → 最小值
  • SUM(字段) → 总和
  • COUNT(字段) → 统计数量

总结

  1. 分组GROUP BY 字段,按指定字段对数据分组,用于统计
  2. 过滤HAVING 条件,对分组后的统计结果过滤
  3. 执行顺序WHERE(先过滤) → GROUP BY(再分组) → HAVING(最后过滤分组结果)
  4. 注意HAVING 可以使用聚合函数,WHERE 不可以
posted @ 2026-04-14 11:36  果子同志  阅读(11)  评论(0)    收藏  举报