我正在尝试显示所有收入高于自己部门平均工资的员工的雇员编号#、员工姓名、部门和工资。
我只试过这个:
Select empno, ename, deptno,sal As Salary
From emp
Where sal >(SELECT AVG (sal) FROM emp);
对于此结构,可以使用相关条件。 这需要引入表别名:
select e.empno, e.ename, e.deptno, e.sal As Salary
from emp e
where e.sal > (select avg(e2.sal) from emp e2 where e2.deptno = e.deptno);
在员工工资高于平均水平的情况下,将表格连接到每个deptno
的平均工资更有效:
select e.empno, e.ename, e.deptno, e.sal
from emp e inner join (
select deptno, avg(sal) sal from emp group by deptno
) t
on t.deptno = e.deptno and t.sal < e.sal
在 Oracle 数据库中,最有效的查询是使用分析函数:
select empno, ename, deptno, sal from
(select emp.*, AVG(sal) over (partition by deptno) avgsal from emp)
where sal > avgsal;
只需对视图进行一个表扫描和筛选。