ថ្ងៃនេះខ្ញុំបានឆ្លងកាត់កិច្ចការខាងក្រោមនៅពេលកំពុងធ្វើការលើគម្រោងអតិថិជន៖ យកតារាង 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 | +--------+-----------+----------+