使用FIND_IN_SET的总体排名,但部门明智的情况是不使用排名查询

时间:2019-04-16 06:58:49

标签: mysql sql

我尝试使用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

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排名,overall_rank FROM performance_score_bk,其中dept_id = 111 enter image description here

1 个答案:

答案 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;