如何获得薪酬最高的员工队伍

dot*_*ner 4 t-sql sql-server sql-server-2008 greatest-n-per-group

表格包括员工姓名,地址,电话,部门,薪水:

如何从每个部门获得薪酬最高的员工

我试过了

select dept, max(salary) from employee group by dept
Run Code Online (Sandbox Code Playgroud)

但它只提供两列.但我想选择一整行.怎么做?

或者如何在结果中添加更多列?

(我使用的是SQL Server 2008)

Der*_*omm 10

您只需将当前拥有的查询加入到employee表中即可获取完整的员工信息.

select e.*
from employee e
inner join (select dept, max(salary) ms from employee group by dept) m
  on e.dept = m.dept and e.salary = m.ms
Run Code Online (Sandbox Code Playgroud)

  • +1从商业角度来看,这是非常好的,如果你在同一部门有两个最高薪水(相同薪水),两者都将被列出.使用row_number()和分区的解决方案很可能会忽略它. (2认同)

Mik*_*son 5

SELECT name,
       address,
       phone,
       department,
       salary,
       dept
FROM   (SELECT name,
               address,
               phone,
               department,
               salary,
               dept,
               row_number() OVER(PARTITION BY dept ORDER BY salary DESC) AS rn
        FROM   employee) AS e
WHERE  e.rn = 1  
Run Code Online (Sandbox Code Playgroud)

如果最高薪水存在平局,则使用row_number()将为您提供一行.如果你想要每个部门的所有最高工资,你应该使用rank()代替.

SELECT name,
       address,
       phone,
       department,
       salary,
       dept
FROM   (SELECT name,
               address,
               phone,
               department,
               salary,
               dept,
               rank() OVER(PARTITION BY dept ORDER BY salary DESC) AS rn
        FROM   employee) AS e
WHERE  e.rn = 1
Run Code Online (Sandbox Code Playgroud)