在SQL中GROUP BY指的是把总数据表切割成若干子数据表,然后再对各个子数据表进行处理,比如我们需要计算下表中每个年级的人数。
grade | name | score |
---|---|---|
一年级 | 小王 | 51 |
一年级 | 小魏 | 61 |
一年级 | 小张 | 71 |
一年级 | 小李 | 51 |
一年级 | 小王 | 51 |
二年级 | 中王 | 51 |
二年级 | 中魏 | 61 |
二年级 | 中张 | 71 |
二年级 | 中李 | 51 |
二年级 | 中王 | 51 |
三年级 | 大王 | 51 |
三年级 | 大魏 | 61 |
三年级 | 大张 | 71 |
三年级 | 大李 | 51 |
三年级 | 大王 | 51 |
输入SQL语句
SELECT grade total,COUNT(name) AS total FROM tbl GROUP BY grade;
输入SQL语句之后的查询结果入下表:
grade | total |
---|---|
一年级 | 5 |
三年级 | 5 |
二年级 | 5 |
我们来详细的来看一下具体的执行过程,如下图
首先,SQL会根据GROUP BY对总数据表进行切分(按“grade”),分成3个子表格。
然后对每个子表格的“name”字段进行COUNT AS(total)计算,再合并生成最后的数据。
同样的道理我们还可以计算每个年级的平均分。
输入SQL语句
SELECT grade total,avg(score) as avg FROM tbl GROUP BY grade;
结果
grade | avg |
---|---|
一年级 | 57 |
三年级 | 57 |
二年级 | 57 |
具体过程,如图