Опитайте:
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 ed колона само ако тази колона е част от заявените таблици и ако не използвате GROUP BY или DISTINCT (освен ако не GROUP BY тази непоказана колона, тогава можете да ORDER BY то).
Причината е проста:ако използвате GROUP BY или DISTINCT , няколко реда потенциално ще бъдат показани като един. Непоказаните стойности в тези „обединени“ редове могат потенциално да се различават една от друга, правейки всеки ORDER BY невъзможно за тези стойности.
Някои СУБД (поне MySQL) се държат по различен начин, позволявайки ORDER ing BY непоказани стойности, дори и с GROUP BY . Но MySQL изглежда след това подрежда по първата срещана стойност на непоказана стойност (вижте цигулка ). Така че по-добре имайте предвид, че това трябва да се избягва, за да предотвратите непредвидими резултати.
РЕДАКТИРАНЕ: Вижте документацията
относно MySQL GROUP BY обработка.