我尝试使用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排名,overall_rank FROM performance_score_bk,其中dept_id = 105
但是,在我尝试获得带有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排名,overall_rank FROM performance_score_bk,其中dept_id = 111
答案 0 :(得分:0)
在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;