现有 2 张表
course
course_id int 课程 ID
score float 课程得分,满分 100,60 及格
student_id int 学生 ID
student
student_id int 学生 ID
name int 学生姓名
一个学生可能有多个课程得分(即 student 一对多于 course )
现定义一个学生及格的条件为所有课程中只要有一门课程及格则算及格,只有所有课程不及格的情况下才算不及格
求所有及格的学生和所有不及格的学生。
及格很简单
SELECT
s.student_id,
s.name
FROM
student s
INNER JOIN
course c
ON
s.student_id = c.student_id
WHERE
c.score >= 60
GROUP BY
student_id
但是不及格却不能直接以 WHERE c.score < 60 GROUP BY student_id
得出结果
问除了使用 ( NOT IN 及格的学生)的结果 还有什么比较好的方法?
此处只是模拟真实场景,实际上的条件比score >= 60
要多,所以不应该特别针对此处使用MIN
来做...(如果回复有我会再说明的)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.