我有一个创建如下结果集的查询:
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中完成吗?
答案 0 :(得分:6)
SELECT MIN(Rank) AS Rank, Name
FROM TableName
GROUP BY Name
答案 1 :(得分:4)
是
select name, min(rank)
from nameTable
group by name
答案 2 :(得分:3)
正如Paul + Kevin指出的那样,可以使用MIN / MAX
等提取从聚合中返回值的简单情况(只需注意RANK
是保留字)
在更一般/更复杂的情况下,例如如果你需要找到第二/第N个最高等级,你可以使用PARTITION
和ROW_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];