以下是我的查询。我不确定是什么原因造成Not A group by expression错误。任何帮助深表感谢。 =)
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;
答案 0 :(得分: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
。
从更一般的角度来看,只有当此列是查询表的一部分并且您不使用任何{{1}时,才允许ORDER BY
非SELECT
ed列}}或GROUP BY
(除非你DISTINCT
这个未显示的列,否则你可以GROUP BY
它。
原因很简单:如果您使用ORDER BY
或GROUP BY
,则可能会有多行显示为一行。这些“合并”行中的非显示值可能彼此不同,使得这些值上的任何DISTINCT
都不可能。
某些DBMS(至少MySQL)表现不同,允许ORDER BY
ORDER
非显示值,即使BY
也是如此。但是MySQL似乎按照第一个遇到的非显示值的值来排序(参见fiddle)。所以,最好记住这应该避免,以防止不可预测的结果。
编辑:请参阅有关MySQL GROUP BY
处理的documentation。
答案 1 :(得分:2)
尝试
ORDER BY Average_Mark
而不是
ORDER BY Mark