Я хочу ранг, используя некоторые условия - PullRequest
2 голосов
/ 25 сентября 2019

Я хочу ранжировать, используя общее число и некоторые условия, такие как exam_Id, class_id, section_id, year.У меня есть много данных, используя разные exam_Id, class_id, section_id, год.Теперь я хочу оценить их, когда эти элементы (exam_Id, class_id, section_id, year) совпадают.Ниже я дал вам SQL-запрос, в котором пытался что-то, но он давал весь результат.

SELECT id, student_id, total_mark, FIND_IN_SET( total_mark, (
SELECT GROUP_CONCAT( total_mark
ORDER BY total_mark DESC ) 
FROM total_marks )
) AS rank
FROM total_marks

Скрипт SQL Link

1 Ответ

3 голосов
/ 25 сентября 2019

Если вы хотите ранжировать - используя этот метод - для групп записей, то вам нужен коррелированный подзапрос:

SELECT id, student_id, exam_id, class_id, total_mark, section_id, year,
       FIND_IN_SET(total_mark,
                   (SELECT GROUP_CONCAT( total_mark ORDER BY total_mark DESC ) 
                     FROM total_marks tm2
                     WHERE tm2.exam_Id = tm.exam_id AND
                           tm2.class_id = tm.class_id AND
                           tm2.section_id = tm.section_id AND
                           tm2.year = tm.year
                   )
                  ) AS rank
FROM total_marks tm;

Здесь - это db <> скрипка.

Обратите внимание, что для правильного написания этого используются оконные функции:

SELECT tm.*,
       RANK() OVER (PARTITION BY exam_Id, class_id, section_id, year 
                    ORDER BY total_mark DESC
                   ) as rank
FROM total_marks tm;

Эта функция является стандартным SQL и доступна в MYSQL начиная с версии 8.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...