У меня есть две таблицы, gradereport
а также student
gradereport стол имеет studentNo который является внешним ключом из таблицы ученик и он также имеет оценки для каждого студента,
Я должен запросить gradereport таблица, чтобы узнать, какие учащиеся не имеют всех оценок «А» на курсах, которые они прошли.
Если у них есть какие-либо оценки, которые не являются «А», то они не должны быть включены в результаты.
Как я могу запросить таблицу gradereport найти студентов, которые не имеют всех «А» на своих курсах.
таблица отчетов
ученический стол
Студенты, у которых нет всех оценок, могут быть найдены как
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 student.name, student.number
FROM student, gradereport
WHERE student.number = gradereport.StudentNumber
AND gradereport.Grade != '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')
Я бы сделал что-то вроде этого:
SELECT
DISTINCT StudentNo
FROM
gradereport GR
WHERE
NOT EXISTS (
SELECT 1
FROM gradereport GR2
WHERE
GR.StudentNo = GR2.StudentNo
AND
GR2.Grade != 'A'
)