استعلام 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   |
+--------+-----------+----------+
عودة