在 SQL 中寻找比赛的获胜者

Finding winners of races in SQL

我有一个 table 有用户的结果,参加不同的比赛。 在每场比赛中表现得分最高的人是每场比赛的获胜者。 所以在下面的例子中,Alice 赢了 0 次,Bob 赢了 1 次,Chris 赢了 2 次。

我需要的是能够为给定用户计算 he/she 在所有比赛中 he/she 参加了多少次胜利,以及另外多少次登上领奖台的结果(第 1 次)第二名或第三名)。

单独使用 SQL 这甚至可能吗?我正在使用 MySQL

P.S。我不知道为什么 table 没有正确呈现,它在预览中看起来很完美,所以如果有人能修复它,我们将不胜感激。

RaceID UserID Performance
1 Alice 90
1 Bob 100
2 Alice 100
2 Bob 90
2 Chris 110
3 Alice 90
3 Bob 80
3 Chris 150

您可以使用 NOT EXISTS 获取每个用户的胜利行并将它们相加:

SELECT t1.UserID,
       SUM(NOT EXISTS(SELECT 1 FROM tablename t2 WHERE t2.RaceID = t1.RaceID AND t2.Performance > t1.Performance)) wins
FROM tablename t1
GROUP BY t1.UserID

如果您的 MySql 版本是 8.0+,您可以使用 MAX() window 函数和聚合来实现:

SELECT UserID, 
       SUM(Performance = max_performance) wins
FROM (
  SELECT *, MAX(Performance) OVER (PARTITION BY RaceID) max_performance
  FROM tablename
) t
GROUP BY UserID

参见demo