Prova:
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
Mentre aggreghi diversi valori di Mark per calcolare la media, diventa impossibile ordinare su ogni valore di Mark . Devi ordinare in base al risultato del calcolo, ovvero Average_Mark .
Da un punto di vista più generale, sei autorizzato a ORDER BY un non SELECT ed solo se questa colonna fa parte delle tabelle interrogate e se non utilizzi alcun GROUP BY o DISTINCT (a meno che tu non GROUP BY questa colonna non visualizzata, quindi puoi ORDER BY esso).
Il motivo è semplice:se usi GROUP BY o DISTINCT , diverse righe verranno potenzialmente visualizzate come una sola. I valori non visualizzati in quelle righe "unite" possono essere potenzialmente diversi l'uno dall'altro, rendendo qualsiasi ORDER BY impossibile su quei valori.
Alcuni DBMS (almeno MySQL) si comportano in modo diverso, consentendo ORDER in BY valori non visualizzati, anche con GROUP BY . Ma MySQL sembra quindi ordinare in base al primo valore rilevato del valore non visualizzato (vedi fiddle ). Quindi, meglio tenere presente che questo dovrebbe essere evitato, per evitare risultati imprevedibili.
MODIFICA: Consulta la documentazione
su MySQL GROUP BY gestione.