在注册“心理学”课程的学生中。他们中有多少%的GPA> 3?
学生:
student_id* | student_name | student_gender
课程:
course_id* | course_name | course_type
学生课程成绩:
student_id | course_id | grade
请注意:
回答:
Select 100*count(case when avg(b.grade) >3 and b.course_name = ‘Psychology’ then 1 else 0)/count(Case when b.course_name = ‘Psychology’ then 1 else O)
From course a left join
student_course_grade b
On a.courseid=b.courseid Join
student c
On c.studentid=b.student.id
Where b.grade is NULL
答案 0 :(得分:0)
获取GPA本身与单个特定类无关。单独考虑它们,然后加入以获得结果。例如:您的GPA> 3仅适用于一个人参加的所有课程。心理学课刚好是一个标志。只要将一个where条件应用到心理学上,您就会错过其余的课程。这样,我得到的是平均成绩,但是如果有任何心理障碍,则可以通过MAX(case / when)来捕获。这样,我就能获得所有班级的头等舱成绩。
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