【发布时间】:2020-01-18 17:59:19
【问题描述】:
3 个表:classes、students 和 class_student(关联表)。以下查询输出每个班级的学生人数。当班级没有学生时,count(..) 为 0,但班级名称仍在结果中。
select c.name, count(s.id)
from classes c
left join
class_student cs on cs.classId = c.id
left join
students s on s.id = cs.studentId
group by c.id;
现在要计算每个班级得分 100% 的学生,因此添加了 WHERE:
select c.name, count(s.id)
from classes c
left join
class_student cs on cs.classId = c.id
left join
students s on s.id = cs.studentId
where s.score = 100 <-- newly added
group by c.id;
那么没有 100% 学生的班级不会出现在结果中。考虑到使用了 LEFT JOIN,我希望 count(s.id) 在没有 100% 的学生时返回 0。我怎样才能使所有课程都在结果中,而那些没有任何 100% 学生的课程的 count(..) 输出为 0。谢谢
【问题讨论】:
-
这两个重复的问题显示了两种不同的解决方案:将过滤条件移动到连接条件中或使用条件计数。