多项赛事积分榜

时间:2019-05-20 06:57:32

标签: mysql group-by ranking

我试图在多项目锦标赛中获得参与者排名。

我可以轻松地为单个事件进行排名。有一种方法可以一次性找到所有内容吗?

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版本中使用,并且在这种情况下无法进行更新。

很明显,我可以按循环分别为每个事件计分, 但我想一次全部尝试。

1 个答案:

答案 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

Demo on dbfiddle