Oracle:不是表达错误的分组

max*_*max 3 sql oracle

以下是我的查询.我不确定是什么原因造成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;
Run Code Online (Sandbox Code Playgroud)

xle*_*ier 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
Run Code Online (Sandbox Code Playgroud)

当你聚合几个值Mark来计算平均值时,就无法对每个值进行排序Mark.你必须对计算结果进行排序,即Average_Mark.


从更一般的角度来看,只有当此列是查询表的一部分并且您不使用任何或(除非您使用此非显示列,然后您可以)时,才允许您ORDER BY使用非SELECTed列.GROUP BYDISTINCTGROUP BYORDER BY

原因很简单:如果使用GROUP BYDISTINCT,则可能会将多行显示为一行.那些"合并"行中的非显示值可能彼此不同,使得ORDER BY这些值上的任何不可能.

某些DBMS(MySQL的至少)的行为不同,允许ORDER荷兰国际集团BY非显示值,即使有GROUP BY.但MySQL似乎按照第一个遇到的非显示值的值来排序(参见小提琴).所以,最好记住这应该避免,以防止不可预测的结果.

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