分别统计出 课程转行外卖骑手
和 演员的素养
这两门课的平均分数
SELECT AVG(score) FROM student_score WHERE subject = '转行外卖骑手';
SELECT AVG(score) FROM student_score WHERE subject = '演员的素养';
- AVG 求平均数
+------------+
| AVG(score) |
+------------+
| 75.2500 |
+------------+
分组查询 group by
以 subject 进行分组 ,求每个小组的平均分数.
SELECT subject, AVG(score) FROM student_score GROUP BY subject;
这个查询的执行过程就是按照subject
中的值将所有的记录分成两组,然后分别对每个分组中记录的score
列调用AVG
函数进行数据统计。
+-----------------------------+------------+
| subject | AVG(score) |
+-----------------------------+------------+
| 转行外卖骑手 | 73.0000 |
| 演员的素养 | 75.2500 |
+-----------------------------+------------+
带有where的分组查询
SELECT subject, AVG(score) FROM student_score WHERE score >= 60 GROUP BY subject;
先去除小于60分的,再进行分组求平均数
用于分组的过滤条件
上面where是分组前进行帅选,下面是用HAVING
对分组后的数据过滤
SELECT subject, AVG(score) FROM student_score GROUP BY subject HAVING AVG(score) > 73;
还是进行分组查询求平均分,但是使用having
,只显示平均分大于73的。
当然,后面的AVG(score)
并不一定是它, 只要是针对这个分组进行统计的聚集函数都可以
比方说老师想查询最高分大于98分的课程的平均分
SELECT subject, AVG(score) FROM student_score GROUP BY subject HAVING MAX(score) > 98;
分组排序
mysql> SELECT subject, AVG(score) AS avg_score FROM student_score \
GROUP BY subject ORDER BY avg_score DESC;
嵌套分组
mysql> SELECT department, major, COUNT(*) FROM student_info \
GROUP BY department, major;
简单查询语句中各子句的顺序
SELECT [DISTINCT] 查询列表
[FROM 表名]
[WHERE 布尔表达式]
[GROUP BY 分组列表 ]
[HAVING 分组过滤条件]
[ORDER BY 排序列表]
[LIMIT 开始行, 限制条数]