ptno ,a.job order by a.deptno ; 分析:
先对【部门】分组,再对【岗位】分组。
【排序】都是放在末尾
3)显示部门平均工资低于2000 的部门号和它的平均工资
SQL:
SELECT avg(a.sal) as "平均工资", a.deptno FROM emp a group by a.deptno having avg(a.sal)<2000 分析:
having:限制分组显示结果。后面不支持别名,只能重新计算。
先分组,计算各个部门的平均工资。再利用having对分组后的结果进行删选。 3、原则总结: 1)聚合函数(avg...)只能出现在选择列表、having、order by 子句中,绝不能出现在group by 函数 和where中。 2)如果在 select 语句中同时包含 group by 、having、order by 那么他们的顺序是 group by 、having、order by 。 3)在选择列中如果有列、表达式和聚合函数,那么这些列和表达式必须有一个出现在 group by 子句中,否则就会出错。
SELECT avg(a.sal), max(a.sal),a.deptno,a.job FROM emp a group by a.deptno, a.job;
这边的 deptno 和 job 必须都要 出现在 group by 中。
原因为聚合函数 每次返回一个结果
|