Sql 按另一个字段最大值分组值
我有下表Sql 按另一个字段最大值分组值,sql,sql-server,sql-server-2008,select,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和名字 预期结果 ID | Name ---|------ 2 | Tom 3 | Max 4 | Jim 实际结果 ID | Name ---|-
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和名字
预期结果
ID | Name
---|------
2 | Tom
3 | Max
4 | Jim
实际结果
ID | Name
---|------
2 | Tom
6 | Tom << duplicate name
3 | Max
4 | Jim
不幸的是,如果最高工资出现两次,则重复出现两次-如何更改子选择以抑制重复名称
这通常使用
行编号()来完成。
:
那么,你想要哪一个薪水为600英镑的汤姆?@HoneyBadger并不重要@Larnu的可能副本,这是无法通过小组解决的。请看链接中的答案。这是相关的;关于如何只返回一组重复结果的第一个值,有1000个答案。
SELECT e1.ID, e1.Name
FROM Employee e1
WHERE e1.Salary =
(
SELECT MAX(e2.Salary)
FROM Employee e2
WHERE e1.Name = e2.Name
);
select . ..
from (select e.*, row_number() over (partition by name order by salary desc) as seqnum
from employee e
) e
where seqnum = 1;