Wypróbuj:
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
Gdy agregujesz kilka wartości Mark aby obliczyć średnią, niemożliwe staje się sortowanie według każdej wartości Mark . Musisz posortować według wyniku obliczeń, tj. Average_Mark .
Z bardziej ogólnego punktu widzenia możesz ORDER BY nie SELECT ed kolumna tylko wtedy, gdy ta kolumna jest częścią żądanych tabel i jeśli nie używasz żadnego GROUP BY lub DISTINCT (chyba że GROUP BY tej niewyświetlanej kolumny, możesz ORDER BY to).
Powód jest prosty:jeśli używasz GROUP BY lub DISTINCT , kilka wierszy będzie potencjalnie wyświetlanych jako jeden. Niewyświetlane wartości w tych „scalonych” wierszach mogą potencjalnie różnić się od siebie, tworząc dowolne ORDER BY niemożliwe dla tych wartości.
Niektóre DBMS (przynajmniej MySQL) zachowują się inaczej, umożliwiając ORDER ing BY niewyświetlane wartości, nawet z GROUP BY . Ale MySQL wydaje się wtedy porządkować według pierwszej napotkanej wartości niewyświetlanej wartości (patrz fiddle ). Dlatego lepiej pamiętaj, że należy tego unikać, aby zapobiec nieprzewidywalnym wynikom.
EDYTUJ: Zobacz dokumentację
o MySQL GROUP BY obsługa.