使用 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 Oracle - 按 ID、任务 ID、最小和最大时间戳分组