按其他字段组值最大值

时间:2018-02-09 12:52:03

标签: sql sql-server sql-server-2008 select

我有以下表格

ID | Name | Salary
---+------+-------
1  |Tom   | 100
2  |Tom   | 600
3  |Max   | 300
4  |Jim   | 400
5  |Max   | 200
6  |Tom   | 600
7  |Jim   | 100

我试着获得那些拥有最高薪水的身份证和姓名。

预期结果

ID | Name 
---|------
2  | Tom
3  | Max
4  | Jim

实际结果

ID | Name 
---|------
2  | Tom
6  | Tom << duplicate name
3  | Max
4  | Jim

过滤器由

完成
SELECT e1.ID, e1.Name
FROM Employee e1
WHERE e1.Salary = 
(
  SELECT MAX(e2.Salary) 
  FROM Employee e2
  WHERE e1.Name = e2.Name
);

不幸的是,如果最高工资出现两次,重复项会出现两次 - 我如何更改子选择以禁止重复名称

demo Playground here

1 个答案:

答案 0 :(得分:2)

这通常是使用row_number()

完成的
select . ..
from (select e.*, row_number() over (partition by name order by salary desc) as seqnum
      from employee e
     ) e
where seqnum = 1;