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(字段) → 统计数量
总结
- 分组:
GROUP BY 字段,按指定字段对数据分组,用于统计
- 过滤:
HAVING 条件,对分组后的统计结果过滤
- 执行顺序:
WHERE(先过滤) → GROUP BY(再分组) → HAVING(最后过滤分组结果)
- 注意:
HAVING 可以使用聚合函数,WHERE 不可以