基于前 N 条记录并按其他列分组
Top N records based and group by other column
我在 SQL 服务器中有 table 3 列
Team (VARCHAR)
、Player (VARCHAR)
和 Point (int)
有 15 支独特的球队,每支球队有 20 多名球员,每个球员都有一个分数。
我想根据他所有得分的总和从每支球队中获得前 10 名球员(因为,每个球员可能有多行,他得分不同)。
我试过了,
SELECT TOP 10 Team,Player,
ISNULL(SUM([Point]), 0)
FROM [SportsTable]
GROUP BY Teams, Player
ORDER BY 3 DESC
但是只得到了全球TOP 10的玩家(只有10行)。每个团队需要 15 * 10 = 150
行。
请指教
你可以使用 ROW_NUMBER() OVER(PARTITION BY Team ORDER BY SUM(Point) DESC)
SELECT
Team,
Player,
Point
FROM(
SELECT
Team,
Player,
Point = ISNULL(SUM(Point), 0),
RN = ROW_NUMBER() OVER(PARTITION BY Team ORDER BY ISNULL(SUM(Point), 0) DESC)
FROM SportsTable
GROUP BY Team, Player
)t
WHERE RN <= 10
我在 SQL 服务器中有 table 3 列
Team (VARCHAR)
、Player (VARCHAR)
和 Point (int)
有 15 支独特的球队,每支球队有 20 多名球员,每个球员都有一个分数。
我想根据他所有得分的总和从每支球队中获得前 10 名球员(因为,每个球员可能有多行,他得分不同)。
我试过了,
SELECT TOP 10 Team,Player,
ISNULL(SUM([Point]), 0)
FROM [SportsTable]
GROUP BY Teams, Player
ORDER BY 3 DESC
但是只得到了全球TOP 10的玩家(只有10行)。每个团队需要 15 * 10 = 150
行。
请指教
你可以使用 ROW_NUMBER() OVER(PARTITION BY Team ORDER BY SUM(Point) DESC)
SELECT
Team,
Player,
Point
FROM(
SELECT
Team,
Player,
Point = ISNULL(SUM(Point), 0),
RN = ROW_NUMBER() OVER(PARTITION BY Team ORDER BY ISNULL(SUM(Point), 0) DESC)
FROM SportsTable
GROUP BY Team, Player
)t
WHERE RN <= 10