使用DENSE-RANK对员工数量最多的部门排名出错求助
问题解决:按部门员工数量正确排名
错误原因
你的查询中,窗口函数DENSE_RANK()错误使用了PARTITION BY department_id——你已经通过GROUP BY department_id将数据按部门分组,每组仅对应一条部门员工数记录。此时按department_id分区会让每个分区内只有一条数据,因此所有部门的排名都会是1,无法实现跨部门的员工数排名。
正确查询语句
写法一:直接在分组后使用窗口函数
SELECT department_id, COUNT(employee_id) no_employee, DENSE_RANK() OVER (ORDER BY COUNT(employee_id) DESC) Rank_ FROM employees GROUP BY department_id;
写法二:子查询分组后再排名(可读性更强)
SELECT department_id, no_employee, DENSE_RANK() OVER (ORDER BY no_employee DESC) Rank_ FROM ( -- 先统计每个部门的员工数 SELECT department_id, COUNT(employee_id) no_employee FROM employees GROUP BY department_id ) AS dept_emp_counts;
结果说明
去掉PARTITION BY department_id后,窗口函数会基于所有分组后的部门数据进行全局排名,按照员工数量从多到少排序,即可得到你期望的结果:员工数最多的部门排名为1,次多的为2,以此类推。
内容的提问来源于stack exchange,提问作者Lacy
相关产品推荐
相关产品推荐

