You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:05:23