3

我有一个创建这样的结果集的查询:

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 中完成吗?

4

3 回答 3

6
SELECT MIN(Rank) AS Rank, Name
FROM TableName
GROUP BY Name
于 2012-06-20T14:56:15.677 回答
4

是的

select name, min(rank)
from nameTable
group by name
于 2012-06-20T14:56:19.920 回答
3

正如 Paul + Kevin 所指出的,可以使用MIN / MAXetc 提取从聚合返回值的简单情况(请注意,这RANK是一个保留字)

在更一般/更复杂的情况下,例如您需要找到第二个/第 N 个最高排名,您可以使用PARTITIONs 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];
于 2012-06-20T15:25:08.513 回答