ID | StudentName | StudentClassID |
---|---|---|
1 | 小明 | 1 |
2 | 小红 | 2 |
3 | 小兰 | 3 |
4 | 小吕 | 2 |
5 | 小梓 | 1 |
班级表(Class)
ClassID | ClassName |
---|---|
1 | 软件一班 |
2 | 软件二班 |
3 | 软件三班 |
计算每个班都有多少学生?
SELECT cl.ClassName,COUNT(stu.StudentClassID) AS studentNum FROM student stu LEFT JOIN class cl ON stu.StudentClassID = cl.ClassID GROUP BY cl.ClassName;
计算结果:
ClassName | StudentName |
---|---|
软件一班 | 2 |
软件二班 | 2 |
软件三班 | 1 |
HAVING
HAVING语句通常与GROUP BY语句联合使用,用来过滤由GROUP BY语句返回的记录集。
HAVING语句的存在弥补了WHERE关键字不能与聚合函数联合使用的不足。
通俗的说:WHERE过滤行,HAVING过滤组
语法
SELECT expression1, expression2, ... expression_n, aggregate_function (aggregate_expression) FROM tables [WHERE conditions] GROUP BY expression1, expression2, ... expression_n
语法说明
HAVING condition这是另一个条件,仅应用于聚合结果以限制返回行的组。只有那些条件评估为TRUE的组才会包含在结果集中。
举例
采用上面两张数据表
查询学生人数大于2人的班级?
SELECT cl.ClassName,COUNT(stu.StudentClassID) AS studentNum FROM student stu LEFT JOIN class cl ON stu.StudentClassID = cl.ClassID GROUP BY cl.ClassName HAVING COUNT(stu.StudentClassID)>=2;
计算结果:
ClassName | StudentName |
---|---|
软件一班 | 2 |
软件二班 | 2 |
小结
文末
本章节主要简单介绍了数据库中group by的用法,并没有详细的展开讲解,相信大家只要把基础打扎实,再复杂的查询也可以通过分而治之的思想来解决。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。