DENSE-RANK 对员工最多的部门进行排名

问题描述 投票:0回答:1

我有一个名为员工的表,其中包含以下列:

+----------------+----------------+------------+--- ------+

|领域 |类型 |空 |关键|

|员工 ID |整数 |否 |优先级 |

|名字 | varchar(20) | varchar(20)是 | |

|姓氏 | varchar(25) | varchar(25) |否 | |

|电子邮件| varchar(100) | varchar(100) |否 | |

|电话号码 | varchar(20) | varchar(20)是 | |

|聘用日期|日期 |否 | |

|job_id |整数 |否 |乘数 |

|薪资|小数(8,2) |否 | |

|manager_id |整数 |是 |乘数 |

|部门 ID |整数 |是 |乘数 |

我想对员工最多的部门进行排名,这是我的查询:

SELECT department_id, COUNT(employee_id) no_employee, 
    DENSE_RANK() 
    OVER (PARTITION BY department_id 
    ORDER BY COUNT(employee_id) DESC ) Rank_ 
FROM employees 
GROUP BY department_id;

然而,结果却将所有部门的排名都归为“1”,无论他们有多少员工,如下所示:

+---------------+----------------+--------+

|部门 ID |没有员工 |排名_|

+---------------+----------------+--------+

| 1 | 1 | 1 |

| 2 | 2 | 1 |

| 3 | 6 | 1 |

起初我没有在查询中添加GROUP BY运算符,但后来系统显示非聚合列错误。

有人可以帮我吗?

我预计结果会是这样的(数据可能不正确)

+---------------+----------------+--------+

|部门 ID |没有员工 |排名_|

+---------------+----------------+--------+

| 1 | 10 | 10 1 |

| 2 | 9 | 2 |

| 3 | 8 | 3 |

mysql rank
1个回答
0
投票

删除partition by子句和rank

SELECT department_id, COUNT(employee_id) no_employee, 
    RANK() OVER (ORDER BY COUNT(employee_id) DESC ) Rank_ 
FROM employees 
GROUP BY department_id;
© www.soinside.com 2019 - 2024. All rights reserved.