Mysql 在SQL中查找比赛的获胜者

Mysql 在SQL中查找比赛的获胜者,mysql,greatest-n-per-group,Mysql,Greatest N Per Group,我有一个表格,上面有参加不同比赛的用户的结果。 在每场比赛中得分最高的人是每场比赛的获胜者。 在下面的例子中,爱丽丝赢了0场,鲍勃赢了1场,克里斯赢了2场 我需要的是,能够计算出一个给定的用户在他/她参加的所有比赛中获得了多少胜利,以及有多少领奖台结果(第一名、第二名或第三名) 仅使用SQL就可以做到这一点吗?我正在使用MySQL 另外,我不知道为什么这个表没有正确呈现,它在预览中看起来非常完美,所以如果有人能修复它,我们将不胜感激 外消旋体 用户ID 演出 1. 爱丽丝 90 1. 上下快速移

我有一个表格,上面有参加不同比赛的用户的结果。 在每场比赛中得分最高的人是每场比赛的获胜者。 在下面的例子中,爱丽丝赢了0场,鲍勃赢了1场,克里斯赢了2场

我需要的是,能够计算出一个给定的用户在他/她参加的所有比赛中获得了多少胜利,以及有多少领奖台结果(第一名、第二名或第三名)

仅使用SQL就可以做到这一点吗?我正在使用MySQL

另外,我不知道为什么这个表没有正确呈现,它在预览中看起来非常完美,所以如果有人能修复它,我们将不胜感激

外消旋体 用户ID 演出 1. 爱丽丝 90 1. 上下快速移动 100 2. 爱丽丝 100 2. 上下快速移动 90 2. 克里斯 110 3. 爱丽丝 90 3. 上下快速移动 80 3. 克里斯 150
您可以使用
notexists
获取每个用户的赢款行,并将其相加:

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()窗口函数和聚合:

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

请参阅CTE中的。

行编号()和外部查询中的聚合。另一方面-如果两个用户具有相同的最大性能会怎样?谢谢@forpas-很好的解决方案,也很高兴添加演示