将相关的 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
您好,我有两个表 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