общий рейтинг, работающий с использованием FIND_IN_SET, но в отношении отдела не работает запрос ранга

#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;