MySQL数据库DML——分组查询
分组查询
为什么要分组?
(1) 默认情况下汇总函数是对全表范围内的数据做统计。
(2) GROUP BY子句的作用是通过一定的规则讲一个数据集划分成若干个小的区域,然后针对每个小区域分别进行数据汇总处理。
SELECT deptno,AVG(sal) FROM t_emp GROUP BY deptno;
逐级分组
(1) 数据库支持多列分组条件,执行的时候逐级分组。
(2) 查询每个部门里,每种职位的人员数量和平均底薪。
SELECT deptno,job,COUNT(*),AVG(sal) FROM t_emp
GROUP BY deptno,job ORDER BY deptno;
对SELECT子句的要求
查询语句中如果含有GROUP BY子句,那么SELECT子句中的内容就必须要遵守规定:SELECT子句中可以包括聚合函数,或者GROUP BY子句的分组列,其余内容均不可以出现在SELECT子句中。
对分组结果集再次做汇总计算
SELECT deptno,COUNT(*),AVG(sal),MAX(sal),MIN(sal)
FROM t_emp GROUP BY deptno WITH ROLLUP;
GROUP_CONCAT函数
GROUP_CONCAT函数可以把分组查询中的某个字段拼接成一个字符串。
案例:查询每个部门内底薪超过2000元的人数和员工姓名
SELECT deptno,GROUP_CONCAT(ename),COUNT(*)
FROM t_emp WHERE sal>=2000
GROUP BY deptno;
各种子句的执行顺序
查询语句中,GROUP BY子句执行顺序:
FROM
→
\to
→WHERE
→
\to
→GROUP BY
→
\to
→SELECT
→
\to
→ORDER BY
→
\to
→LIMIT