Oracle无需相关子查询和内联查询实现查询薪资高于部门平均薪资的员工
Oracle单查询实现薪资高于部门平均薪资的员工统计
可以通过Oracle分析窗口函数实现需求,不需要使用关联内联查询,也不涉及相关子查询,实现逻辑如下:
核心思路
使用AVG() OVER (PARTITION BY deptno)窗口函数,按部门分区计算每个部门的平均薪资,直接映射到对应部门的每一条员工记录上,无需提前聚合生成临时表再关联。
具体实现
查询符合条件的员工明细
SELECT empno, ename, job, sal, deptno FROM ( SELECT e.*, AVG(sal) OVER (PARTITION BY deptno) dept_avg_sal FROM emp e ) WHERE sal > dept_avg_sal ORDER BY deptno;
直接统计符合条件的员工数量
SELECT COUNT(*) AS high_sal_emp_count FROM ( SELECT e.*, AVG(sal) OVER (PARTITION BY deptno) dept_avg_sal FROM emp e ) WHERE sal > dept_avg_sal;
方案优势
- 没有使用关联内联子查询结构,也不存在相关子查询,符合需求限制
- 仅扫描一次
emp表即可完成计算,相比原关联写法执行效率更高 - 写法更简洁,易维护
内容的提问来源于stack exchange,提问作者Lara
相关产品推荐
相关产品推荐

