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
相关产品推荐
相关产品推荐

