MySQL запрос отобрать студентов, которые не имеют всех оценок «А»

У меня есть две таблицы, gradereport а также student

gradereport стол имеет studentNo который является внешним ключом из таблицы ученик и он также имеет оценки для каждого студента,

Я должен запросить gradereport таблица, чтобы узнать, какие учащиеся не имеют всех оценок «А» на курсах, которые они прошли.

Если у них есть какие-либо оценки, которые не являются «А», то они не должны быть включены в результаты.

Как я могу запросить таблицу gradereport найти студентов, которые не имеют всех «А» на своих курсах.

таблица отчетов

ученический стол

0

Решение

Студенты, у которых нет всех оценок, могут быть найдены как

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(*)
2

Другие решения

вы можете сделать эксклюзивную проверку, как так

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

ЛУЧШАЯ ДЕМО

1

Попробуй это:

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

Найдите всех учеников, у которых есть хотя бы один класс А:

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

Нахождение противоположных результатов:

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

Я бы сделал что-то вроде этого:

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

0