本章主要介绍数据库中group by
的用法,也是咱们在使用数据库时很是基础的一个知识点。而且也会涉及Join的使用,关于Join的用法,能够看我写的上一篇文章:带你了解数据库中JOIN的用法 若有错误还请你们及时指出~php
如下都是采用mysql数据库html
Group By语句从英文的字面意义上理解就是“根据(by)必定的规则进行分组(Group)”。 做用:经过必定的规则将一个数据集划分红若干个小的区域,而后针对若干个小区域进行数据处理。mysql
注意:group by 是先排序后分组!git
SELECT expression1, expression2, ... expression_n,
aggregate_function (aggregate_expression)
FROM tables
[WHERE conditions]
GROUP BY expression1, expression2, ... expression_n
[ORDER BY expression [ ASC | DESC ]];
复制代码
expression1,expression2,... expression_n
表达式未封装在聚合函数中,必须包含在SQL语句末尾的GROUP BY子句中。github
aggregate_function
这是一个聚合函数,例如SUM,COUNT,MIN,MAX或AVG函数。sql
aggregate_expression
这是将使用aggregate_function的列或表达式。数据库
tables
您但愿从中检索记录的表。FROM子句中必须至少列出一个表。express
where
可选的。这些是要选择的记录必须知足的条件。编程
ORDER BY
表达式 可选的。用于对结果集中的记录进行排序的表达式。若是提供了多个表达式,则值应以逗号分隔。bash
ASC
可选的。ASC按表达式按升序对结果集进行排序。若是没有修饰符是提供者,则这是默认行为。
DESC
可选的。DESC按表达式按降序对结果集进行排序。
咱们如下面两张表举例:
学生表(Student)
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 |
SELECT expression1, expression2, ... expression_n,
aggregate_function (aggregate_expression)
FROM tables
[WHERE conditions]
GROUP BY expression1, expression2, ... expression_n
复制代码
HAVING condition
这是另外一个条件,仅应用于聚合结果以限制返回行的组。只有那些条件评估为TRUE的组才会包含在结果集中。
采用上面两张数据表
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的用法,并无详细的展开讲解,相信你们只要把基础打扎实,再复杂的查询也能够经过
分而治之
的思想来解决。 欢迎关注公众号:Coder编程 获取最新原创技术文章和相关免费学习资料,随时随地学习技术知识!
参考文章:
www.techonthenet.com/sql/having.…
www.techonthenet.com/sql/group_b…
欢迎你们关注并Star~