សំណួរ SQL ដើម្បីកំណត់បញ្ជីចំណាត់ថ្នាក់

ថ្ងៃនេះខ្ញុំបានឆ្លងកាត់កិច្ចការខាងក្រោមនៅពេលកំពុងធ្វើការលើគម្រោងអតិថិជន៖ យកតារាង SQL "អ្នកប្រើប្រាស់" ជាមួយនឹងជួរឈរ "id" និង "ពិន្ទុ" ហើយកំណត់បញ្ជីចំណាត់ថ្នាក់នៃអ្នកប្រើប្រាស់ទាំងអស់ តម្រៀបដោយផ្អែកលើ "ពិន្ទុ" ដែលអ្នកប្រើប្រាស់ដែលមានពិន្ទុដូចគ្នាទទួលបានចំណាត់ថ្នាក់ដូចគ្នា។ ដោយប្រើ អថេរដែលកំណត់ដោយអ្នកប្រើប្រាស់ កិច្ចការនេះអាចត្រូវបានដោះស្រាយដោយវិចារណញាណ និងងាយស្រួល។


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   |
+--------+-----------+----------+
ថយក្រោយ