在 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。
我有一个 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。