2006年,哪些学生的多门课程的总决赛成绩超过90?

时间:2019-07-18 12:47:08

标签: postgresql ms-access-2010

我有一张学生表,以及他们在特定年份和特定课程中获得的成绩。我需要编写一个查询,该查询将为在多个课程中取得90分以上的学生返回StudentID,courseID和finalGrade。到目前为止,这就是我所拥有的。我可以输出一份学生名单,他们所修课的课程以及他们的最终成绩,但是我不知道如何将其范围缩小到如果ID在两门或两门以上课程中> 90的学生在此列表中出现多次的学生。

SELECT GRADES.StudentID, GRADES.CourseID, GRADES.Final, Count(*)
FROM GRADES
GROUP BY GRADES.StudentID, GRADES.CourseID, GRADES.Final, GRADES.Year
HAVING (((GRADES.Final)>90) AND ((Count(*))>1) AND ((GRADES.Year)=2006));

1 个答案:

答案 0 :(得分:1)

听起来很简单。这是标准的SQL,不知道Access是否支持它:

SELECT studentid, courseid, final
FROM (SELECT studentid, courseid, final,
             COUNT (*) FILTER (WHERE final > 90)
                       OVER (PARTITION BY studentid)
                AS num_courses_over_90
      FROM grades
      WHERE year = 2006
     ) AS q
WHERE num_courses_over_90 > 1;

我不确定是否要为最终结果中列出的这些学生提供 all 个课程,还是只希望其得分超过90分的课程。如果是后者,请在末尾添加以下内容:

AND final > 90