GROUP BY
GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。
GROUP BY 简单实例
我们先从简单的开始学习,先关注我们的教师表teachers
,教师来自不同的国家,我们希望统计不同国家教师的人数,可以使用GROUP BY
来统计我们查询的结果,并将结果按照不同国籍教师人数从小到大排列,如果相同教师数量则按照国籍名称排列
SELECT country, COUNT(country) as teacher_count
FROM teachers
GROUP BY country
ORDER BY teacher_count, country;
执行输出结果
mysql> SELECT country, COUNT(country) as teacher_count
-> FROM teachers
-> GROUP BY country
-> ORDER BY teacher_count, country;
+---------+---------------+
| country | teacher_count |
+---------+---------------+
| JP | 1 |
| UK | 1 |
| USA | 1 |
| CN | 2 |
+---------+---------------+
4 rows in set (0.00 sec)
可以看到我们的结果很好的展示了出来
GROUP BY 多表实例
我们课程表courses
每节课程的由一个老师授课,而一个老师对应多门课程,下面我们实现SQL语句,统计每个老师教授课程的学生总数,如果教师没有授课则返回学生上课人数为0
SELECT T.name as teacher_name, IFNULL(SUM(C.student_count),0) as student_count
FROM courses C RIGHT JOIN teachers T
ON C.teacher_id = T.id
GROUP BY T.id;
执行输出结果
mysql> SELECT T.name as teacher_name, IFNULL(SUM(C.student_count),0) as student_count
-> FROM courses C RIGHT JOIN teachers T
-> ON C.teacher_id = T.id
-> GROUP BY T.id;
+------------------+---------------+
| teacher_name | student_count |
+------------------+---------------+
| Eastern Heretic | 3200 |
| Northern Beggar | 0 |
| Western Venom | 4570 |
| Southern Emperor | 1520 |
| Linghu Chong | 0 |
+------------------+---------------+
5 rows in set (0.00 sec)
GROUP BY 总结
通过上述案例的学习,我们可以总结出GROUP BY的使用方法
语法
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
Last updated
Was this helpful?