我试图在多项目锦标赛中获得参与者排名。
我可以轻松地为单个事件进行排名。有一种方法可以一次性找到所有内容吗?
Given input: "Bob"
Data example: Desired output:
Name | Event | Score Name | Event | Score | Rank
-------------------- ----------------------------
Bob 1 100 Bob 1 100 1
Bob 2 75 Bob 2 75 3
Bob 3 80 Bob 3 80 2
Jill 2 90
Jill 3 60
Chris 1 70
Chris 2 50
Chris 3 100
Amy 1 85
Amy 2 95
Amy 3 65
要注意的是:我无权访问Rank() 可以在我的SQL版本中使用,并且在这种情况下无法进行更新。
很明显,我可以按循环分别为每个事件计分, 但我想一次全部尝试。
答案 0 :(得分:2)
您可以在MySQL中使用自联接对同一Event
中得分较高的值进行模拟,然后计算每个参与者得分较高的数量:
SELECT s1.Name, s1.Event, s1.Score, COUNT(s2.Name)+1 AS Rank
FROM scores s1
LEFT JOIN scores s2 ON s2.Event = s1.Event AND s2.Score > s1.Score
WHERE s1.Name = 'Bob'
GROUP BY s1.Name, s1.Event, s1.Score
ORDER BY s1.Name, s1.Event
输出:
Name Event Score Rank
Bob 1 100 1
Bob 2 75 3
Bob 3 80 2