3

以下是我的查询。我不确定是什么原因导致 Not A group by 表达式错误。任何帮助深表感谢。=)

SELECT c.courseID, c.courseName, AVG(a.Mark) as Average_Mark
FROM course c, assessment a
WHERE c.courseID = a.courseID
Group by c.courseID, c.courseName
ORDER BY Mark DESC;
4

2 回答 2

11

尝试:

SELECT c.courseid,
       c.coursename,
       AVG(a.mark) AS Average_Mark
FROM   COURSE c
       INNER JOIN ASSESSMENT a
               ON c.courseid = a.courseid
GROUP  BY c.courseid,
          c.coursename
ORDER  BY 3 DESC; -- or ORDER BY Average_Mark DESC

当您聚合多个 的值Mark以计算平均值时,不可能对 的每个值进行排序Mark。您必须对计算结果进行排序,即Average_Mark.


从更一般的角度来看,仅当此列是查询表的一部分并且您不使用任何或时才允许您ORDER BY使用非ed 列(除非您使用此未显示的列,那么您可以)。SELECTGROUP BYDISTINCTGROUP BYORDER BY

原因很简单:如果您使用GROUP BYor DISTINCT,几行可能会显示为一行。这些“合并”行中未显示的值可能彼此不同,从而使ORDER BY这些值不可能。

一些 DBMS(至少是 MySQL)的行为不同,允许ORDERingBY不显示的值,即使使用GROUP BY. 但是 MySQL 似乎按照第一个遇到的非显示值的值排序(参见fiddle)。因此,最好记住应该避免这种情况,以防止出现不可预测的结果。

编辑:请参阅有关 MySQL处理的文档。GROUP BY

于 2013-07-19T12:58:18.793 回答
2

尝试

ORDER BY Average_Mark

代替

ORDER BY Mark
于 2013-07-19T12:59:16.940 回答