分组查询遇到的困难 查询部门门]平均底薪超过2000元的部门编号 SELECT deptno FROM t_emp WHERE AVG(sal) >=2000 GROUP BY deptno; 上述例子中由于 WHERE 子句执行顺序优于 GROUP BY 子句,但 WHERE 子句中的聚合函数又得依靠 GROUP BY来进行分组,所以就会导致运行出错 HAVING子句 SELECT deptno FROM t_emp GROUP BY deptno HAVING AVG(sal) >=2000; HAVING 子句紧跟在 GROUP BY 后面 HAVING子句的用途 查询每个部门中,1982年以后入职的员工超过2个人的部门编号 SELECT deptno FROM t_emp WHERE hiredate>="1982-01-01 " GROUP BY deptno HAVING COUNT(*)>=2 ORDER BY deptno ASC; HAVING子句的特殊用法 按照数字1分组,MySQL会依据SELECT子句中的列进行分组,HAVING子句也可以正常使用 SELECT deptno, COUNT(*) FROM t_emp GROUP BY 1 ; SELECT deptno, COUNT(*) FROM t_emp GROUP BY 1 HAVING deptno IN(10, 20) ; 1对应就是deptno列上面的例子中deptno IN(10,20)建议写到 WHERE子句中,因为WHERE子句先执行,可以先筛选一波数据 SELECT deptno, empno, COUNT(*) FROM t_emp WHERE deptno IN(10,20) GROUP BY 1,2; 上面例子中GROUP BY后的1,2 对应就是 deptno, empno列