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