общий ранг работает с использованием FIND_IN_SET, но отдел не работает ранг запроса - PullRequest
0 голосов
/ 16 апреля 2019

Я попытался получить общий рейтинг, используя FIND_IN_SET, он работает, в то же время, используя Department_id 105, он работает.

запрос: SELECT id, emp_id, emp_name, dept_id, total_pt, FIND_IN_SET (total_pt, (SELECT GROUP_CONCAT (total_pt ORDER BY total_pt DESC) FROM performance_score)) AS rank, total_rank FROM performance_score_bk где

= dept_id

enter image description here

Но после того, как я попытался получить ранг с Department_id 111, он не начинается с ранга 1, он начинается с 8 и не имеет правильного порядка.Пожалуйста, проверьте, сообщите мне, где я допустил ошибку.

запрос: SELECT id, emp_id, emp_name, dept_id, total_pt, FIND_IN_SET (total_pt, (SELECT GROUP_CONCAT (total_pt ORDER BY total_pt DESC) FROM performance_score)) AS rank, total_rank FROM performance_score_bk, где dept_id = 111 enter image description here

1 Ответ

0 голосов
/ 16 апреля 2019

Имитация ранга в версиях MySQL 5.7 и более ранних - настоящая боль в шее. Если у вас есть долгосрочная потребность в ранге или других аналитических функциях, рассмотрите возможность обновления до 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...