試してみてください:
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が許可されています SELECT以外 この列がクエリされたテーブルの一部であり、GROUP BYを使用しない場合にのみ、ed列 またはDISTINCT (GROUP BYを除く この表示されていない列の場合、ORDER BYできます
理由は簡単です。GROUP BYを使用する場合 またはDISTINCT 、複数の行が1つとして表示される可能性があります。これらの「マージされた」行に表示されない値は、互いに異なる可能性があり、ORDER BYになります。 これらの値では不可能です。
一部のDBMS(少なくともMySQL)は動作が異なり、ORDERが可能です。 ing BY GROUP BYを使用しても、表示されない値 。しかし、MySQLは、表示されていない値の最初に検出された値で順序付けているようです(フィドル> )。したがって、予測できない結果を防ぐために、これは避ける必要があることに注意してください。
編集: ドキュメント
を参照してください。 MySQLについてGROUP BY 取り扱い。