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

Posted

技术标签:

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

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

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

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

结果

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

【问题讨论】:

【参考方案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,不,当有多个部门时,这很好用

以上是关于使用 SQL 获取按部门分组的最大值的主要内容,如果未能解决你的问题,请参考以下文章

mssql 2005查询 请问我要实现分组获取最大值,怎么写sql查询指令

如何在sql中找到具有多个最大值的组的最大值?

SQL Oracle - 按 ID、任务 ID、最小和最大时间戳分组

按多个字段分组并使用 Dart 和 Flutter 获取最大值

SQL:选择具有最大值的行并按单列分组

SQL - 使用分组方式选择,从具有最大值(日期)的寄存器中获取数据