我有一个创建这样的结果集的查询:
Rank Name
1 Fred
1 John
2 Mary
2 Fred
2 Betty
3 John
4 Betty
4 Frank
然后我需要为每个名称选择最低等级,例如:
Rank Name
1 Fred
1 John
2 Mary
2 Betty
4 Frank
这可以在 TSQL 中完成吗?
我有一个创建这样的结果集的查询:
Rank Name
1 Fred
1 John
2 Mary
2 Fred
2 Betty
3 John
4 Betty
4 Frank
然后我需要为每个名称选择最低等级,例如:
Rank Name
1 Fred
1 John
2 Mary
2 Betty
4 Frank
这可以在 TSQL 中完成吗?
SELECT MIN(Rank) AS Rank, Name
FROM TableName
GROUP BY Name
是的
select name, min(rank)
from nameTable
group by name
正如 Paul + Kevin 所指出的,可以使用MIN / MAX
etc 提取从聚合返回值的简单情况(请注意,这RANK
是一个保留字)
在更一般/更复杂的情况下,例如您需要找到第二个/第 N 个最高排名,您可以使用PARTITION
s withROW_NUMBER()
进行排名,然后按排名进行过滤。
SELECT [Rank], [Name]
FROM
(
SELECT [RANK], [Name],
ROW_NUMBER() OVER (PARTITION BY [Name] ORDER BY [Rank]) as [RowRank]
FROM [MyTable]
) AS [MyTableReRanked]
WHERE [RowRank] = @N
ORDER BY [Rank];