|
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 的部门 |
|
|