1
group by
查询各个
部门的
平均薪水
select avg(sal) from emp group by deptno;
将部门
编号和
部门平均薪水一起查出来
select deptno,avg(sal) from emp group by deptno;
好了,现在我想将
部门名字和
平均薪水一起查出来,这么做可以吗?
select d.dname,avg(e.sal) 平均薪水 from dept d,emp e
where d.deptno = e.deptno
group by d.deptno;
这么做是查不出结果来的。而且会报这么个错误
不是 GROUP BY 表达式
为什么呢?
因为这时候其实是按照
部门名称分组的
所以group by的时候添加一个部门名称就可以查出来了
select d.dname,avg(e.sal) 平均薪水 from dept d,emp e
where d.deptno = e.deptno
group by d.deptno,d.dname;
2
having
现在,我想查询
平均工资在
2000元以上的部门,怎么查呢?
select deptno,avg(sal) from emp
where avg(sal) > 2000
group by deptno;
显示以下错误:
ERROR 位于第 1 行:
ORA-00934: 此处不允许使用分组函数
那么该如何写呢?这时候就需要用到
having关键词来替代
where了
having过滤的是
组条件,而 where 过滤的是
单行条件。
select deptno,avg(sal) from emp
group by deptno
having avg(sal) > 2000;
这么写才能得出
平均薪水
大于 2000 的部门