我有一个名为员工的表,其中包含以下列:
+----------------+----------------+------------+--- ------+
|领域 |类型 |空 |关键|
|员工 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 |
删除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;