Oracle SQL单表查询问题:统计经理下属人数结果不符
修正Oracle SQL查询以正确统计经理下属数量
问题分析
现有查询的核心错误在于关联条件逻辑错误:
JOIN xxaazl_empleados_t gerente ON emp.gerente = gerente.gerente
该语句将员工的gerente字段(指向经理的员工ID)与经理自身的gerente字段(经理的上级ID)做关联,导致匹配逻辑完全错误,从而得到了不符合预期的统计结果。
修正后的查询语句
SELECT gerente.nombre_empleado AS Manager_name, COUNT(emp.empleado_id) AS Total FROM xxaazl_empleados_t emp JOIN xxaazl_empleados_t gerente ON emp.gerente = gerente.empleado_id -- 修正关联逻辑:员工的经理ID对应经理的员工ID WHERE emp.gerente IS NOT NULL GROUP BY gerente.empleado_id, gerente.nombre_empleado -- 增加经理ID分组,避免同名经理的统计混淆 ORDER BY Total DESC;
关键修正点
- 修正关联逻辑:将关联条件改为
emp.gerente = gerente.empleado_id,确保员工记录正确关联到其直属经理的记录。 - 优化分组逻辑:GROUP BY中加入
gerente.empleado_id,避免出现同名经理时,下属数量被错误合并统计。 - 更精准的统计字段:使用
COUNT(emp.empleado_id)替代COUNT(emp.nombre_empleado),员工ID是唯一标识,即使存在姓名为空的情况也不影响统计准确性。
执行上述修正后的语句,即可得到期望的统计结果:
Manager_name Total 1 Carlos 3 2 Juan 2
内容的提问来源于stack exchange,提问作者The Storyteller
相关产品推荐
相关产品推荐

