Получение самого GPA не имеет ничего общего с одним конкретным классом. Думайте о них индивидуально, затем присоединяйтесь, чтобы получить результат. Пример: ваш средний балл> 3 предназначен исключительно для ВСЕХ курсов, которые посещал человек. Урок психологии как раз и случается, когда вы катаетесь как флаг. Как только вы примените условие where только к психологии, вы пропустите остальные классы. Таким образом, я получаю среднее по оценкам, но МАКС (случай / когда), чтобы поймать, ЕСЛИ кто-нибудь был психологический класс. Таким образом, я получаю все оценки класса в первую очередь.
select
s.Student_Name,
s.Student_Gender,
AllGPA.GPA
from
( select
cg.Student_ID,
avg(cg.grade) GPA,
max( case when c.course_name = 'Psychology' then 1 else 0 end ) TookPsychClass
from
Course_Grade cg
JOIN Course c
on cg.course_id = c.course_id
group by
cg.Student_ID
having
avg( cg.grade ) > 3
and max( case when c.course_name = 'Psychology' then 1 else 0 end ) = 1
) AllGPA
JOIN Student S
on AllGPA.Student_ID = S.StudentID