每个部门的最高薪水

新手上路,请多包涵

我有一张桌子 EmpDetails

 DeptID      EmpName   Salary
Engg        Sam       1000
Engg        Smith     2000
HR          Denis     1500
HR          Danny     3000
IT          David     2000
IT          John      3000

我需要查询每个部门的最高薪水。

原文由 Qinnovator 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 391
2 个回答

SELECT DeptID, MAX(Salary) 从 EmpDetails GROUP BY DeptID

上述查询是公认的答案,但不适用于以下情况。假设我们必须在下表中找到每个部门中薪水最高的员工。

部门编号企业名称薪水英格山姆1000英格史密斯2000英格汤姆2000人力资源丹尼斯1500人力资源丹尼3000它大卫2000它约翰3000

请注意,Smith 和 Tom 属于 Engg 部门,两人的薪水相同,是 Engg 部门中最高的。因此查询“SELECT DeptID, MAX(Salary) FROM EmpDetails GROUP BY DeptID”将不起作用,因为 MAX() 返回单个值。以下查询将起作用。

SELECT DeptID, EmpName, Salary FROM EmpDetails WHERE (DeptID,Salary) IN (SELECT DeptID, MAX(Salary) FROM EmpDetails GROUP BY DeptID)

输出将是

部门编号企业名称薪水英格史密斯2000英格汤姆2000人力资源丹尼3000它约翰3000

原文由 AVee 发布,翻译遵循 CC BY-SA 4.0 许可协议

感谢@JoeStefanelli 的回答( https://stackoverflow.com/a/8477083/4691279 )。他提供了 SQL Server 2005+ 版本,我使用它来创建 Oracle 版本:

 WITH cteRowNum(dep_id, emp_id, Salary, RowNums) AS (
    SELECT dep_id, emp_id, Salary,
           DENSE_RANK() OVER(PARTITION BY dep_id ORDER BY Salary DESC) AS RowNums
        FROM employee
)
SELECT cteRowNum.dep_id, cteRowNum.emp_id, cteRowNum.Salary
    FROM cteRowNum
    WHERE cteRowNum.RowNums = 1;

您可以使用 livesql.oracle.com 对此进行测试,以下是您可以使用的我的 DDL 和 DML:

 create table employee (
emp_id varchar2(50) NOT NULL,
dep_id varchar2(50) NOT NULL,
salary number not null
);

create table department (
dep_id varchar2(50) NOT NULL,
dep_name varchar2(50) NOT NULL
);

insert into employee values (100, 5000, 1000000);
insert into employee values (200, 5000, 2000000);
insert into employee values (300, 5000, 3000000);
insert into employee values (400, 6000, 1500000);
insert into employee values (500, 6000, 1500000);
insert into employee values (600, 7000, 1000000);
insert into employee values (700, 7000, 1000000);
insert into employee values (800, 7000, 2000000);

insert into department values (5000, 'dep 1');
insert into department values (6000, 'dep 2');
insert into department values (7000, 'dep 3');

下面是查询成功的截图:

在此处输入图像描述

原文由 hagrawal 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进