站点介绍
本章主要介绍数据库中 groupby的用法,也是咱们在使用数据库时非常基本的一个知识点。并且也会涉及Join的使用,关于Join的用法,可以看我写的上一篇文章:带你知道数据库中JOIN的用法 如有错误还请各位及时指出~
以下都是选用mysql数据库
Group By
Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。 作用:通过一定的规则将一个数据集划分成若干个小的位置,然后针对若干个小位置进行数据处理。
注意:group by 是先排序后分组!
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子句中。
aggregate_function 这就是一个聚合函数,例如SUM,COUNT,MIN,MAX或AVG函数。
aggregate_expression 这是将使用aggregate_function的列或表示式。
tables 您希望从中检索记录的表。FROM子句中一定至少列出一个表。
where 可选的。这些是要选择的记录一定满足的条件。
ORDER BY表示式 可选的。用于对结果集中的记录进行排序的表示式。如果提供了多个表示式,则值应以逗号分隔。
ASC 可选的。ASC按表示式按升序对结果集进行排序。如果没有修饰符是提供者,则这是默认行为。
DESC 可选的。DESC按表示式按降序对结果集进行排序。
count() 计数sum() 求和avg() 平均数max() 最大值min() 最小值举例
学生表(Student)
IDStudentNameStudentClassID1小明12小红23小兰34小吕25小梓1
班级表(Class)
ClassIDClassName1应用一班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;
ClassNameStudentName应用一班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;
ClassNameStudentName应用一班2应用二班2
当group by 与聚合函数配合使用时,功能为分组后计算当group by 与 having配合使用时,功能为分组后过滤,获得满足条件的分组的返回结果。having与where区别:where过滤行,having过滤组文末
本章节主要简单介绍了数据库中group by的用法,并没有详细的展开教学,相信各位只要把基本打扎实,再复杂的盘查也完全可以通过 分而治之的思想来解决。 欢迎关注公众账号:Coder编程 获取最新原创技术文章和相关免费学习资料,什么时候都可以学习技术知识!