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