Kueri SQL untuk menentukan daftar peringkat

Hari ini saya menemukan tugas berikut saat mengerjakan proyek pelanggan: Ambil tabel SQL "pengguna" dengan kolom "id" dan "skor" dan tentukan peringkat semua pengguna berdasarkan "skor" di mana pengguna dengan mendapatkan peringkat yang sama. Tugas ini dapat diselesaikan secara intuitif dan mudah dengan menggunakan variabel 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 variabel menyelesaikan ini dengan 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 mendapatkan hasil yang diinginkan

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