Как ранжировать баллы используя sql ранг - PullRequest
0 голосов
/ 22 октября 2018

Я пытался ранжировать некоторые оценки в базе данных, но вывод неправильный.Я делал это раньше, но я забыл, как я это сделал.

sql

 SELECT `total_score`, FIND_IN_SET( `total_score`, (
SELECT GROUP_CONCAT( DISTINCT `total`
ORDER BY `total_score` DESC ) FROM `table` WHERE `class`="class" AND `session`="2018/2019")
) AS rank
FROM `table` WHERE `class`="class" AND `session`="2018/2019";

Это данные, с которыми я сейчас работаю scores

Вывод
Output

По результатам наивысшего балла получает тот, кто получил наименьший ранг.Я использовал group_concat, потому что я хочу иметь возможность выбирать некоторый диапазон данных с тем же классом и сессией, а затем ранжировать общие баллы, и я хочу, чтобы самый высокий был первым. Надеюсь, что имеет смысл .

Данные, которые мне предоставили, действительно велики, и я просто хочу иметь возможность выбрать классы учеников, академическую сессию или что-то еще, их общий балл за эту конкретную сессию и оценить их.

1 Ответ

0 голосов
/ 22 октября 2018

В более старых версиях MySQL я бы рекомендовал использовать переменные:

SELECT total, (@rank := @rank + 1) as rank
FROM (SELECT DISTINCT CASTt.total + 0 as total
      FROM `table` t
      WHERE class = 'class' AND session = '2018/2019'
      ORDER BY total ASC
     ) t CROSS JOIN
     (SELECT @rank := 0) params;

В MySQL 8+ вы должны сделать:

SELECT DISTINCT t.total, DENSE_RANK() OVER (ORDER BY total + 0 ASC) as the_rank
FROM `table` t
WHERE class = 'class' AND session = '2018/2019'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...