select deptno avg(sal) as "平均工资"
from emp
group by deptno
having avg(sal) > 2000
having和where的区别
/*把姓名不包含A的所有员工按部门编号分组,
统计输出部门平均工资大于2000的部门的部门编号,平均工资*/
select deptno,avg(sal)
from emp
where ename not like '%A%'
group by deptno
having avg(sal) > 2000
where对原始记录过滤,having对分组后的记录过滤,where必须写在having的前面,顺序不能颠倒*
注意
- having子句是用来对分组之后的数据进行过滤,因此使用having前通常先使用group by
- 如果没有使用group by,但是用了having,则意味着把所有的记录当作一组来过滤
- having子句出现的字段必须是分组之后,组的整体信息,having子句不允许出现组内详细信息
- where和having条件中都不允许出现字段的别名