रैंकिंग सूची निर्धारित करने के लिए SQL क्वेरी

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