Coba:
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
Saat Anda menggabungkan beberapa nilai Mark untuk menghitung rata-rata, menjadi tidak mungkin untuk mengurutkan setiap nilai Mark . Anda harus mengurutkan berdasarkan hasil perhitungan, yaitu Average_Mark .
Dari sudut pandang yang lebih umum, Anda diperbolehkan untuk ORDER BY bukan SELECT ed kolom hanya jika kolom ini adalah bagian dari tabel yang ditanyakan dan jika Anda tidak menggunakan GROUP BY atau DISTINCT (kecuali Anda GROUP BY kolom yang tidak ditampilkan ini, maka Anda dapat ORDER BY itu).
Alasannya sederhana:Jika Anda menggunakan GROUP BY atau DISTINCT , beberapa baris akan berpotensi ditampilkan sebagai satu. Nilai yang tidak ditampilkan di baris "gabungan" tersebut berpotensi berbeda satu sama lain, membuat ORDER BY apa pun tidak mungkin pada nilai-nilai tersebut.
Beberapa DBMS (setidaknya MySQL) berperilaku berbeda, memungkinkan ORDER menggunakan BY nilai yang tidak ditampilkan, bahkan dengan GROUP BY . Tetapi MySQL tampaknya kemudian mengurutkan berdasarkan nilai pertama yang ditemukan dari nilai yang tidak ditampilkan (lihat biola ). Jadi, lebih baik diingat bahwa ini harus dihindari, untuk mencegah hasil yang tidak terduga.
EDIT: Lihat dokumentasi
tentang MySQL GROUP BY penanganan.