試してみてください:
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
取り扱い。