SQL-konsulto por determini rangoliston

Hodiaŭ mi renkontis la sekvan taskon laborante pri projekto de kliento: Prenu SQL-tablon "uzanto" kun la kolumnoj "id" kaj "poentaro" kaj determinu rangon de ĉiuj uzantoj laŭ "poentaro" en kiu uzantoj kun la akiru la saman rangotabelon kun la sama poentaro. Ĉi tiu tasko povas esti solvita intuicie kaj facile per uzantaj difinitaj variabloj .


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