将相关的 oracle 子查询转换为单个查询

converting correlated oracle subquery to single query

您好,我有两个表 EMP 和 Dept(数据与 oracle 的普通 emp 和 dept 表相同) 我想在不使用相关子查询的情况下找到收入超过其所在部门的 avg(sal) 的员工人数。我写了如下查询

SELECT * from emp e JOIN
   (SELECT avg(sal) avgsal,deptno
          FROM emp group by deptno )avgsal_tab
 on e.sal > avgsal_tab.avgsal where e.deptno =avgsal_tab.deptno
 order by e.deptno 

这为我提供了输出,但我如何使用单个查询重写它而不使用如上所示的内联查询。

您可以使用 analytic window functions:

SELECT *
from (
  SELECT 
    e.*
    ,avg(sal)over(partition by deptno) avgsal
  from emp e
)
where avgsal>sal