【发布时间】:2017-06-25 10:26:00
【问题描述】:
我想知道通过所有科目的学生人数(分数 >= 4)。
例如:
学生 1(好的):
- 数学:5
- 化学:4
学生 2(好的):
- 理念:7
学生 3(不行):
- 数学:3
- 理念:6
学生 4(不行):
- 数学:null
- 理念:8
数据库:
-学生(身份证)
-subjects_students(id_subject, id_student, mark)
SQL(使用 MySQL):
SELECT count(ss.id_student)
FROM subjects_students ss
WHERE (SELECT count(ss.id_student)
FROM students st
WHERE ss.id_student = st.id)
=
(SELECT count(ss.id_student)
FROM students st
WHERE ss.id_student = st.id
AND ss.mark >= 4)
我似乎无法获得正确的金额。我有学生通过了一些科目,但不是全部。
EDIT:标记可以为null。不要算这些。
回答:
SELECT COUNT(*)
FROM
(
SELECT COUNT(ss.id_student)
FROM subjects_students ss
GROUP BY ss.id_student
HAVING MIN(ss.mark) >= 4 AND COUNT(ss.mark) = COUNT(*)
) src;
【问题讨论】:
-
找到至少一门科目不及格的学生可能会更容易,然后将其从学生列表中删除。
-
您是否也想计算在subjects_students中没有任何条目的学生,因为他们还没有任何科目不及格?
-
不,只是通过所有科目的学生。