выберите информацию о студентах, которые получили A на всех экзаменах - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть три таблицы:

STUDENT
Studentid (pk) | Lastname | Firstname

SUBJECT
Subjectcode (pk) | Subjectyear (pk) | Subjectname

EXAM
Studentid (pk, fk) | Subjectcode (pk, fk) | Subjectyear(pk, fk) | Grade

Мне нужно сделать выборочное утверждение, которое возвращает Студенческое имя, Фамилию и Имя всех студентов, которые получили только оценку А на экзаменах по своим предметам. Итак, скажем, что конкретный студент сдал экзамены по трем различным предметам и получил A, B и A, тогда они не должны быть включены в результат. Если другой студент сдал два экзамена по двум различным предметам и получил А и А, они должны быть включены в результат.

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Если у всех студентов есть хотя бы 1 экзамен, вы можете использовать NOT EXISTS:

select s.* from student s
where not exists (
  select 1 from exam
  where studentid = s.studentid and grade <> 'A'
)
1 голос
/ 28 апреля 2020

Один из вариантов - агрегация:

select st.studendid, st.lastname, st.firstname
from student st
inner join exam ex on ex.studendid = st.studendid
group by st.studendid, st.lastname, st.firstname
having min(ex.grade) = max(ex.grade) and min(ex.grade) = 'A'

На самом деле, предполагая, что 'A' является наименее ранжированным по алфавиту, предложение having можно упростить следующим образом:

having max(ex.grade) = 'A'

Обратите внимание, что вам не нужна таблица subject, чтобы получить результат, который вы ищете.

...