#mysql #sql
#mysql #sql
Вопрос:
Я попытался получить общий рейтинг, используя FIND_IN_SET, он работает, в то же время, используя department_id 105, он работает.
запрос: ВЫБЕРИТЕ id, emp_id,emp_name, dept_id, total_pt, FIND_IN_SET( total_pt, ( ВЫБЕРИТЕ GROUP_CONCAT( total_pt ORDER BY total_pt DESC) ИЗ performance_score ) ) В КАЧЕСТВЕ ранга, общий рейтинг ИЗ performance_score_bk, где dept_id = 105
Но после того, как я попытался получить ранг с помощью department_id 111, он не начинается с ранга 1, он начинается с 8 и не имеет правильного порядка. Пожалуйста, проверьте, сообщите мне, где я допустил ошибку.
запрос: ВЫБЕРИТЕ id, emp_id,emp_name, dept_id, total_pt, FIND_IN_SET( total_pt, ( ВЫБЕРИТЕ GROUP_CONCAT( total_pt ORDER BY total_pt DESC) ИЗ performance_score ) ) В КАЧЕСТВЕ ранга, общий рейтинг ИЗ performance_score_bk, где dept_id = 111
Комментарии:
1. Пожалуйста, укажите запрос, который вы пробовали.
2. Я поделился своим запросом
Ответ №1:
Имитация ранга в версиях MySQL 5.7 и более ранних — настоящая проблема. Если у вас есть долгосрочная потребность в rank или других аналитических функциях, рассмотрите возможность обновления до MySQL 8 . В MySQL 8 мы можем легко написать:
SELECT
dept_id,
total_pt,
RANK() OVER (PARTITION BY dept_id ORDER BY total_pt DESC) `rank`,
RANK() OVER (ORDER BY total_pnt DESC) overall_rank
FROM yourTable
ORDER BY
dept_id,
total_pt DESC;