Pertanyaan SQL untuk menentukan senarai ranking

Hari ini saya menemui tugas berikut semasa mengerjakan projek pelanggan: Ambil jadual pengguna "SQL" dengan lajur "id" dan "skor" dan tentukan senarai ranking semua pengguna disusun berdasarkan "skor" di mana pengguna dengan mendapat kedudukan yang sama dengan skor yang sama. Tugas ini dapat diselesaikan secara intuitif dan mudah dengan menggunakan pemboleh ubah yang ditentukan pengguna .


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)

Menggunakan dua pemboleh ubah menyelesaikannya secara sederhana

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

dan anda mendapat output yang anda mahukan

+--------+-----------+----------+
|  *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   |
+--------+-----------+----------+
Belakang