Maanta waxaan la kulmay hawsha soo socota anigoo ka shaqeynaya mashruuc macaamil: Qaado miiska SQL "isticmaale" oo leh tiirarka "id" iyo "score" oo go'aan ka gaar qiimeynta dhammaan isticmaaleyaasha ku saleysan "dhibic" taas oo isticmaaleyaasha leh hel isla darajo isku dhibco ah. Hawshan waxaa lagu xallin karaa si macquul ah oo fudud iyadoo la adeegsanayo doorsoomayaal adeegsadeyaal lagu qeexay .
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)
Adeegsiga laba doorsoome ayaa tan si fudud ku xalinaya
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
waxaadna heleysaa wax soo saarka aad rabto
+--------+-----------+----------+ | *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 | +--------+-----------+----------+