Oracle统计各部门员工数:如何显示无员工部门的0值?
如何在Oracle中统计所有部门员工数(包含无员工部门显示0)
你的问题根源在于使用了INNER JOIN,这种连接仅返回两张表中匹配的记录,因此没有员工的部门(比如Marketing)会被过滤掉。要实现需求,需要做两个关键修改:
- 将
INNER JOIN替换为LEFT JOIN(Oracle中LEFT OUTER JOIN与LEFT JOIN等价),这样会保留departments表的所有记录,即便employees表中没有对应匹配项 - 将
count(*)改为count(e.employee_id),因为count(*)会统计所有行(包括左连接生成的NULL行),而count(具体字段)会忽略NULL值,确保无员工的部门能正确显示0
修改后的完整查询代码:
select d.department_id, d.department_name, count(e.employee_id) as cnt from departments d LEFT JOIN employees e on e.department_id = d.department_id group by d.department_id, d.department_name ORDER BY d.department_id;
执行后会得到预期结果:
| DEPARTMENT_ID | DEPARTMENT_NAME | CNT |
|---|---|---|
| 1 | IT | 6 |
| 2 | Sales | 3 |
| 3 | Marketing | 0 |
| 4 | Finance | 2 |
内容的提问来源于stack exchange,提问作者Pugzly
相关产品推荐
相关产品推荐

