Oracle第三天学习(group by)

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

你可能感兴趣的:(oracle,sql)