group by的使用场景
- select 后使用聚合函数,例COUNT(),NUM(),SUM(*)
GROUP BY 语句根据一个或多个字段对结果集进行分组(也就是把值相同放到一个组中,显示组中一条记录),实现对每个组而不是对整个结果集统计。SELECT子句中的列名必须为分组列、聚合函数或常量。
语法形式为:
SELECT [field1, field12, ..., ] fun_name
FROM tablename
JOIN ON join_condition
WHERE where_conditon
GROUP BY field1, field12, ..., fieldn
[WITH ROLLUP]
[HAVING having_condition]
[ORDER BY field1, field12, ..., fieldn [ASC | DESC]]
参数说明:
SELECT 子句中的列必须为分组列(写在GROUP BY 后面的列)、聚合函数(SUM、MAX、AVG等)或常量(MySql5.7以后版本,默认是开启了only_full_group_by 模式的)。
fun_name 表示聚合函数,常见的有:SUM(总和)、AVG(平均值)、COUNT(行数)、MAX(最大值)、MIN(最小值)、GROUP_CONCAT(串联的字符串)、JSON_ARRAYAGG(将结果集作为单个JSON数组返回)、JSON_OBJECTAGG(将结果集作为单个JSON对象返回)。
GROUP BY 表示一个或多个字段对结果集进行分组,比如按照部门统计人数。
WITH ROLLUP 是可选的,表示是否对分组后的结果再进行统计。
HAVING 表示对分组的结果再进行条件过滤,比如统计部门人数大于10人的部门。(HAVING和WHERE的区别,HAVING 是对分组后的结果进行条件的过滤,而WHERE是在分组前进行条件的过滤,如果可以,我们应尽可能用WHERE先过滤记录,这样结果集减少,提高分组效率。)
网友评论