MySQL 查询 select 没有全部 'A' 成绩的学生

MySQL query select students who do not have all 'A' grade

我有两个 table,gradereportstudent

gradereport table 有 studentNo 这是 table [=35] 的外键=]student 并且它还有每个学生的成绩,

我必须查询 gradereport table 以找出哪些学生在他们所学的课程中没有达到所有成绩 'A'。

如果他们有任何不属于 'A' 的成绩,那么他们不应包含在结果中。

我如何查询 table gradereport 以查找课程中没有全部 'A' 的学生。

成绩报告table

学生table

试试这个:

SELECT student.name, student.number
FROM student, gradereport
WHERE student.number = gradereport.StudentNumber
AND gradereport.Grade != 'A'

查找至少有一个成绩为 A 的所有学生:

SELECT DISTINCT `StudentNo` FROM `gradereport` WHERE `Grade` = 'A'

找到相反的结果:

SELECT `StudentNo` FROM `gradereport` WHERE `StudentNo` NOT IN (SELECT DISTINCT `StudentNo` FROM `gradereport` WHERE `Grade` = 'A')

所有成绩都不是 A 的学生可以找到

select s.*,
gr.section,
gr.grade 
from student s 
join gradereport gr on gr.studentNo = s.studentnumber 
group by s.studentnumber,gr.section 
having sum(gr.grade='A') <> count(*) ;

或者如果您不关心 section 那么

select s.* 
from student s 
join gradereport gr on gr.studentNo = s.studentnumber 
group by s.studentnumber 
having sum(gr.grade='A') <> count(*)

你可以像这样进行独占检查

SELECT distinct studentno FROM gradereport gr
WHERE gr.grade = "A"
AND NOT EXISTS
(   SELECT 1
    FROM gradereport
    WHERE grade <> "A"
    AND studentno = gr.studentno
)

DEMO

你也可以进行独占连接(我的偏好)

SELECT DISTINCT gr.studentno
FROM gradereport gr
LEFT JOIN gradereport gr1 ON gr1.studentno = gr.studentno AND gr1.grade <> "A"
WHERE gr1.studentno is null 

BETTER DEMO

我会这样做:

SELECT DISTINCT StudentNo FROM gradereport GR WHERE NOT EXISTS ( SELECT 1 FROM gradereport GR2 WHERE GR.StudentNo = GR2.StudentNo AND GR2.Grade != 'A' )