【发布时间】:2020-03-11 15:18:32
【问题描述】:
有 2 张桌子。表“students”,列“student_id”和“score”。关联表“class_student”与列“class_id”和“student_id”。如何列出班级所有学生成绩都在80以上的class_id。也就是说,如果班级有任何学生成绩低于80,则该班级将不会被列出。
【问题讨论】:
有 2 张桌子。表“students”,列“student_id”和“score”。关联表“class_student”与列“class_id”和“student_id”。如何列出班级所有学生成绩都在80以上的class_id。也就是说,如果班级有任何学生成绩低于80,则该班级将不会被列出。
【问题讨论】:
为此我会使用min():
select cs.class_id
from class_student cs join
students s
on s.student_id = cs.student_id
group by cs.class_id
having min(s.score) >= 80;
【讨论】:
按类别分组,只取那些没有符合您指定条件的记录的组
select cs.class_id
from class_student cs
join students s on s.student_id = cs.student_id
group by cs.class_id
having sum(s.score < 80) = 0
【讨论】: