MySQL 使用篇 分组查询

分别统计出 课程转行外卖骑手演员的素养 这两门课的平均分数

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 开始行, 限制条数]
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:设计师小姐姐 返回首页