我有以下表格
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
);
不幸的是,如果最高工资出现两次,重复项会出现两次 - 我如何更改子选择以禁止重复名称
答案 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;