基于前 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