如何使用COUNT(*)关联其他表按条件分组统计各部门学生人数
原语句错误原因
- 子查询未和外层的部门表做字段关联,导致统计的是所有部门的学生总人数,而非单个部门对应的学生数
- 缺少
GROUP BY分组逻辑,直接查询非聚合字段(DepartmentId、Name)和聚合统计结果,不符合SQL分组语法规范
修正方案
推荐使用LEFT JOIN + GROUP BY的写法,性能更优,同时兼容无学生的部门也会显示人数为0:
SELECT d.DepartmentId, d.Name, COUNT(s.StudentId) AS NumberOfStudents FROM Departments d LEFT JOIN Students s ON d.DepartmentId = s.DepartmentId GROUP BY d.DepartmentId, d.Name
如果要保留子查询的写法,可修改为关联外层部门表的版本:
SELECT d.DepartmentId, d.Name, (SELECT COUNT(*) FROM Students s WHERE s.DepartmentId = d.DepartmentId) AS NumberOfStudents FROM Departments d
两种写法都可以输出你预期的统计结果。
内容的提问来源于stack exchange,提问作者abdou93
相关产品推荐
相关产品推荐

