Турнирная таблица нескольких событий - PullRequest
1 голос
/ 20 мая 2019

Я пытаюсь получить рейтинг участников в турнире с несколькими соревнованиями.

Я могу довольно легко составить рейтинг для одного события.Есть ли способ найти ВСЕ за один раз?

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 Ответ

2 голосов
/ 20 мая 2019

Вы можете эмулировать функцию ранжирования в 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

Демонстрация на dbfiddle

...