आज मैं ग्राहक परियोजना पर काम करते समय निम्नलिखित कार्य में आया हूं: कॉलम "आईडी" और "स्कोर" के साथ एक 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 | +--------+-----------+----------+