Sql commands Oracle



我正在尝试显示所有收入高于自己部门平均工资的员工的雇员编号#、员工姓名、部门和工资。

我只试过这个:

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;

只需对视图进行一个表扫描和筛选。

最新更新