where 和 having 的区别

  1. where 和 group by 都是条件,条件都不能用别名

    查询出平均工资高于2000的部门
    SELECT e.deptno,AVG(e.sal) FROM emp e GROUP BY e.deptno HAVING AVG(e.sal) >2000; 
    查询出每个部门工资高于1000的员工的平均工资
    SELECT e.deptno,AVG(e.sal) asal FROM emp e WHERE e.sal >1000 GROUP BY e.deptno;
    查询出每个部门工资高于1000且平均工资高于2000的部门和员工
    SELECT e.deptno,AVG(e.sal) FROM emp e WHERE e.sal>1000 GROUP BY e.deptno HAVING  AVG(e.sal) >2000;
  2. select 后面出现的原始列必须在 group by后面出现,group by 后面出现的原始列可以不在 select 后面出现

    每个部门的平均工资
    SELECT e.deptno,AVG(e.sal) FROM emp e GROUP BY e.deptno,e.sal;
  3. where 是过滤分组前的数据,必须放在 group by 之前;having 是过滤分组后的数据,必须放在group by 之后

    查询出每个部门工资高于1000且平均工资高于2000的部门和员工(错误写法)
    SELECT e.deptno,AVG(e.sal) FROM emp e WHERE AVG(e.sal)>1000 GROUP BY e.deptno HAVING  AVG(e.sal) >2000;

你可能感兴趣的:(where 和 having 的区别)