SQL COUNT函数统计马德里地区部门员工数的实现问题
统计马德里各部门员工总数的SQL问题
我尝试统计位于马德里的各部门员工总数,编写了如下SQL代码但遇到瓶颈无法推进,我仅学习SQL两周,对此十分困扰:
SELECT nomDepar, ciudadSede, count(idempleado) as "Numero de Empleados" from departamentos d, sedes s, empleados where d.idSede = s.idSede and s.ciudadSede in ('Madrid') group by nomdepar, ciudadsede
问题分析与修正
你的代码核心问题是没有关联departamentos(部门表)和empleados(员工表),这会导致两张表产生笛卡尔积,统计结果完全错误。另外,建议使用显式JOIN语法替代旧的逗号分隔表的写法,逻辑更清晰易读。
修正后的代码(假设部门表和员工表通过idDepar关联,可根据实际表结构调整关联字段):
SELECT d.nomDepar, s.ciudadSede, COUNT(e.idempleado) AS "Numero de Empleados" FROM departamentos d JOIN sedes s ON d.idSede = s.idSede JOIN empleados e ON d.idDepar = e.idDepar -- 新增部门与员工的关联条件 WHERE s.ciudadSede = 'Madrid' -- 单个值用=比IN更高效 GROUP BY d.nomDepar, s.ciudadSede
额外说明
如果需要统计马德里所有部门,包括没有员工的部门(这类部门员工数显示为0),可以把JOIN empleados改成LEFT JOIN empleados:
SELECT d.nomDepar, s.ciudadSede, COUNT(e.idempleado) AS "Numero de Empleados" FROM departamentos d JOIN sedes s ON d.idSede = s.idSede LEFT JOIN empleados e ON d.idDepar = e.idDepar WHERE s.ciudadSede = 'Madrid' GROUP BY d.nomDepar, s.ciudadSede
内容的提问来源于stack exchange,提问作者Cristian G. Rodriguez
相关产品推荐
相关产品推荐

