SQL-konsulto por determini rangoliston

Hodiaŭ mi renkontis la jenan taskon laborante pri klienta projekto: Prenu SQL-tabelon "uzanto" kun la kolumnoj "id" kaj "score" kaj determinu rangoliston de ĉiuj uzantoj, ordigitaj laŭ "poentaro", en kiu uzantoj kun la sama poentaro ricevas la saman rangon. Per uzado de uzant-difinitaj variabloj, ĉi tiu tasko povas esti solvita intuicie kaj facile.


CREATE TABLE
    user(id INT, score INT);
INSERT INTO
    user(id, score)
VALUES
    (1, 10), (2, 40), (3, 55), (4, 10), (5, 5), (6, 20), (7, 30), (8, 70), (9, 30)

Uzi du variablojn solvas ĉi tion simple:

SET @score_prev = NULL;
SET @cur_rank = 0;
SELECT id, score, CASE
    WHEN @score_prev = score THEN @cur_rank
    WHEN @score_prev := score THEN @cur_rank := @cur_rank + 1
END AS rank
FROM user
ORDER BY score DESC

kaj vi ricevas la deziratan rezulton:

+--------+-----------+----------+
|  *id*  |  *score*  |  *rank*  |
|    8   |      70   |      1   |
|    3   |      55   |      2   |
|    2   |      40   |      3   |
|    7   |      30   |      4   |
|    9   |      30   |      4   |
|    6   |      20   |      5   |
|    1   |      10   |      6   |
|    4   |      10   |      6   |
|    5   |       5   |      7   |
+--------+-----------+----------+
Reen