You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle中使用OVER()函数:如何无子查询/CTE求部门薪资总和最大值

用OVER()函数获取各部门薪资总和的最大值方案

没问题,我来帮你搞定这个需求!不用子查询和CTE,只靠窗口函数OVER()就能实现。咱们可以通过嵌套窗口函数的方式来完成,具体SQL如下:

SELECT DISTINCT
    MAX(SUM(salary) OVER(PARTITION BY department_id)) OVER() AS max_dept_salary_total
FROM Employees;

代码解释:

  • SUM(salary) OVER(PARTITION BY department_id):这部分会按照部门ID分组,计算出每个部门的薪资总和,并且把这个总和赋值给每一行对应的员工记录。
  • MAX(...) OVER():外层的这个MAX窗口函数没有指定分区条件,所以会在所有行的部门薪资总和中找出最大值,这样每一行都会带上这个全局的最大值。
  • DISTINCT:因为每个部门的所有员工行都会返回相同的最大值,加上这个关键字可以去掉重复行,只保留唯一的最大值结果。

举个例子,如果你的Employees表中有三个部门,薪资总和分别是12000、18000、15000,那么执行这段SQL后会得到如下结果:

max_dept_salary_total
18000

内容的提问来源于stack exchange,提问作者Yuri Molodyko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:26:18