【发布时间】:2013-03-04 19:37:28
【问题描述】:
我正在尝试编写一个查询来计算和列出学生的 GPA,然后只显示低于所有学生平均 GPA 的那些。我已成功获得查询以输出每个学生的 GPA 表,但我无法让它仅显示低于平均水平的表。
以下是我当前的查询:
SELECT SC.StudentID, S.StdLastName, GPA
FROM (SELECT SC.StudentID, S.StdLastName, ROUND(SUM(C.Credits * GV.GradeValue)/SUM(C.Credits), 2) AS GPA
FROM ((Student_Classes AS SC INNER JOIN GradeValues AS GV ON SC.Grade = GV.Grade)
INNER JOIN Students AS S ON SC.StudentID = S.StudentID)
INNER JOIN Classes as C ON SC.ClassID = C.ClassID
GROUP BY SC.StudentID, S.StdLastName)
GROUP BY SC.StudentID, S.StdLastName, GPA
HAVING GPA < AVG(GPA)
ORDER BY GPA;
当我这样做时,出现的错误是,
您尝试执行的查询不包含指定表达式 GPA
我在此站点上发现了多个页面上的类似错误,但仍然无法使其正常工作。任何帮助将不胜感激。
【问题讨论】:
-
您能确认您使用的是什么数据库吗?这似乎不是 MySQL 语法,主要是由于缺少派生表别名和额外的括号。它看起来像 MS Access。
-
@bluefeet 是的,对不起。把mySQL放错了。这是在 MS Access 中。
-
感谢您的确认,我想确保您找到正确的人来查看问题。 :)
-
这个查询存在一个基本问题:
group by GPA将导致AVG(GPA)始终等于GPA。我怀疑该错误是因为您尝试在其中一个分组列上使用聚合函数。 -
@Allan 我不确定我是否理解。如果我没有在 GROUP BY 中包含 GPA,我会收到一个错误,因为 SELECT 中不是函数的任何内容都需要在 GROUP BY 中,不是吗?