-3

在注册“心理学”课程的学生中。他们中有多少人的 GPA > 3?

学生:

student_id* | student_name | student_gender

课程:

course_id* | course_name | course_type 

学生课程等级:

student_id | course_id | grade

请注意 :

  1. Student_course_grade 表中的成绩字段是 (5,4,3,2,1) 中的数字,而不是像 (A,B,C,D,E) 这样的字母成绩
  2. 对于已注册课程但尚未完成课程的学生,成绩将为空。
  3. GPA= 平均成绩(学生所有成绩的平均值)

答:

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
4

1 回答 1

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
于 2019-10-13T14:05:15.733 回答