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)
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)
归档时间: |
|
查看次数: |
34225 次 |
最近记录: |