使用SQL获取按部门分组的最大值

时间:2018-11-10 17:43:06

标签: sql oracle group-by

我正在尝试从按 DEPT 分组的 ORG 表中查看最高薪水。以下是我使用Oracle SQL创建的表数据

enter image description here

我已使用该查询对DEPT和总薪水进行分组和显示,如下所示,其中我获得了分组部门及其对应的总薪水

查询:从ORG GROUP BY DEPT中选择DEPT,SUM(SALARY);

结果

enter image description here

但是我希望结果仅显示上述值的最大值 即2 |硬件| 113000。请您帮忙修改上面的查询。谢谢

3 个答案:

答案 0 :(得分:2)

您似乎想要整行,而不是聚合。因此,在这种情况下,请使用where子句以及相关的子查询:

select o.*
from org o
where o.salary = (select max(o2.salary) from org o2 where o2.dept = o.dept);

答案 1 :(得分:2)

如果汇总查询仅需要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

答案 2 :(得分:1)

您的查询已经接近解决方案。您只需要获得薪水最大值的行:

WITH SUMSAL AS (SELECT DEPT, SUM(SALARY) AS SAL FROM ORG GROUP BY DEPT)
SELECT * FROM SUMSAL 
WHERE SAL = (SELECT MAX(SAL) FROM SUMSAL)

如果有多个部门的最高工资总额,这可能会给您提供多于一行的信息。