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 yang diurutkan berdasarkan "skor" di mana pengguna dengan mendapatkan peringkat yang sama dengan skor 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 | +--------+-----------+----------+