Dina iki aku nemokake tugas ing ngisor iki nalika nggarap proyek pelanggan: Njupuk tabel SQL "pangguna" kanthi kolom "id" lan "skor" lan nemtokake dhaptar peringkat kabeh pangguna, diurutake adhedhasar "skor", ing ngendi pangguna kanthi skor sing padha entuk peringkat sing padha. Kanthi nggunakake variabel sing ditemtokake pangguna, tugas iki bisa ditanggulangi kanthi intuisi lan gampang.
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)
Nggunakake rong variabel bisa ngatasi iki kanthi gampang:
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
lan sampeyan entuk output sing dikarepake:
+--------+-----------+----------+ | *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 | +--------+-----------+----------+