【发布时间】:2019-04-13 23:12:04
【问题描述】:
我正在尝试从按 DEPT 分组的表 ORG 中查看最高工资。下面是我使用 Oracle SQL 创建的表数据
我已经使用查询来分组和显示部门和总工资,如下所示,我得到了分组的部门及其对应的总工资
查询 :SELECT DEPT,SUM(SALARY) FROM ORG GROUP BY DEPT;
结果:
但我希望结果仅显示上述最大值 即,2 |硬件 | 113000 .你能帮忙修改一下上面的查询吗..谢谢
【问题讨论】:
我正在尝试从按 DEPT 分组的表 ORG 中查看最高工资。下面是我使用 Oracle SQL 创建的表数据
我已经使用查询来分组和显示部门和总工资,如下所示,我得到了分组的部门及其对应的总工资
查询 :SELECT DEPT,SUM(SALARY) FROM ORG GROUP BY DEPT;
结果:
但我希望结果仅显示上述最大值 即,2 |硬件 | 113000 .你能帮忙修改一下上面的查询吗..谢谢
【问题讨论】:
如果您只需要聚合查询中的 1 行,您可以使用子查询来获取它。
SQL> select *
2 from (
3 select dept,SUM(salary) sum_salary
4 from org
5 group by dept
6 order by sum_salary desc
7 )
8 where rownum <= 1
DEPT SUM_SALARY
---------- ----------
HW 113000
【讨论】:
您似乎想要整行,而不是聚合。因此,在这种情况下,使用 where 子句和相关子查询:
select o.*
from org o
where o.salary = (select max(o2.salary) from org o2 where o2.dept = o.dept);
【讨论】:
您的查询已经接近解决方案。您只需要获取薪水最大值的行:
WITH SUMSAL AS (SELECT DEPT, SUM(SALARY) AS SAL FROM ORG GROUP BY DEPT)
SELECT * FROM SUMSAL
WHERE SAL = (SELECT MAX(SAL) FROM SUMSAL)
如果有多个部门的最高工资总和,这可能会给你不止一排。
【讨论】: