作用:如果想对分组的数据再进行过滤,需要使用having子句;
找出每个工作岗位的平均薪水,要求显示平均薪水大于2000的; 1)
思路分析:先对工作岗位 job 分组,然后对每一组薪水求平均值,最后再对每一组平均薪水的值进行
大于2000的条件过滤;
错误写法:select job,avg(sal) from emp where avg(avg) > 2000 group by job;
原因:where关键字后面不能直接使用分组函数,这不SQL询句的执行顺序有关系,它会先执行
from emp,然后再迚行 where 条件过滤,where条件过滤结束之后再执行 group by 分组,之后才会
显示出查询结果。
正确写法:select job,avg(sal) from emp group by job having avg(sal) > 2000;
注意:能够在where在过滤的数据不要放到having中迚行过滤,否则影响SQL询句的执行效率
where 与 having 区别:
where 和 having 都是为了完成数据的过滤,它们后面都是添加条件;
where 是在 group by之前完成过滤;
having 是在 group by 之后完成过滤;