【问题标题】:Get maximum value of grouped by departments using SQL使用 SQL 获取按部门分组的最大值
【发布时间】:2019-04-13 23:12:04
【问题描述】:

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

我已经使用查询来分组和显示部门和总工资,如下所示,我得到了分组的部门及其对应的总工资

查询 :SELECT DEPT,SUM(SALARY) FROM ORG GROUP BY DEPT;

结果

但我希望结果仅显示上述最大值 即,2 |硬件 | 113000 .你能帮忙修改一下上面的查询吗..谢谢

【问题讨论】:

    标签: sql oracle group-by


    【解决方案1】:

    如果您只需要聚合查询中的 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】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        如果有多个部门的最高工资总和,这可能会给你不止一排。

        【讨论】:

        • @Radim Bača,不,当有多个部门时,这很好用
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-14
        • 1970-01-01
        • 2021-09-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多