MySQL中使用 group by 对数据进行分组。它必须配合聚合函数进行使用, 对数据进行分组后可以执行 count 、 sum 、 avg 、 max 和 min 等操作。
下面是一个简单的示例,将员工表 employee 按照部门 department 进行分组,统计各个部门的人数。
完整的表中数据如下:
使用如下语句对数据进行分组:
SELECT department, Count(*) FROM employee GROUP BY department;
结果如下:
之前我们对数据过滤使用 WHERE 子句, 对于分组后的数据我们使用 HAVING 子句。 此时, WHERE 子句表示对分组前数据的过滤。
我们想要统计,员工工资不小于10000且部门人数多于1个人的部门统计。
SQL语句可以这么写:
SELECT department, Count(*) FROM employee
WHERE salary >= 10000
GROUP BY department
HAVING Count(*) > 1;
结果如下:
group_concat 配合 group by 一起使用,用于将某一列的值按指定的分隔符进行拼接,MySQL中默认为逗号。
比如我们按照部门分组后,想查看每个部门中都有谁,SQL语句可以写成这样:
SELECT department, Count(*), GROUP_CONCAT(name)
FROM employee
GROUP BY department;
结果如下: