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.