以下是我的查询。我不确定是什么原因导致 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;
尝试:
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 列(除非您使用此未显示的列,那么您可以)。SELECT
GROUP BY
DISTINCT
GROUP BY
ORDER BY
原因很简单:如果您使用GROUP BY
or DISTINCT
,几行可能会显示为一行。这些“合并”行中未显示的值可能彼此不同,从而使ORDER BY
这些值不可能。
一些 DBMS(至少是 MySQL)的行为不同,允许ORDER
ingBY
不显示的值,即使使用GROUP BY
. 但是 MySQL 似乎按照第一个遇到的非显示值的值排序(参见fiddle)。因此,最好记住应该避免这种情况,以防止出现不可预测的结果。
编辑:请参阅有关 MySQL处理的文档。GROUP BY
尝试
ORDER BY Average_Mark
代替
ORDER BY Mark