आज मैं ग्राहक परियोजना पर काम करते समय निम्नलिखित कार्य में आया हूं: कॉलम "आईडी" और "स्कोर" के साथ एक SQL टेबल "उपयोगकर्ता" लें और "स्कोर" द्वारा क्रमबद्ध सभी उपयोगकर्ताओं की एक रैंकिंग सूची निर्धारित करें जिसमें उपयोगकर्ता समान स्कोर के साथ समान रैंकिंग प्राप्त करें। उपयोगकर्ता द्वारा परिभाषित चर का उपयोग करके इस कार्य को सहज और आसानी से हल किया जा सकता है।
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)
दो चरों का उपयोग करने से यह सरल हो जाता है
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
और आपको मनचाहा आउटपुट मिलता है
+--------+-----------+----------+ | *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 | +--------+-----------+----------+