MySQL 查询 select 没有全部 'A' 成绩的学生
MySQL query select students who do not have all 'A' grade
我有两个 table,gradereport
和 student
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
)
你也可以进行独占连接(我的偏好)
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
我会这样做:
SELECT
DISTINCT StudentNo
FROM
gradereport GR
WHERE
NOT EXISTS (
SELECT 1
FROM gradereport GR2
WHERE
GR.StudentNo = GR2.StudentNo
AND
GR2.Grade != 'A'
)
我有两个 table,gradereport
和 student
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
)
你也可以进行独占连接(我的偏好)
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
我会这样做:
SELECT
DISTINCT StudentNo
FROM
gradereport GR
WHERE
NOT EXISTS (
SELECT 1
FROM gradereport GR2
WHERE
GR.StudentNo = GR2.StudentNo
AND
GR2.Grade != 'A'
)