Versuchen Sie:
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
Da Sie mehrere Werte von Mark
aggregieren Um den Durchschnitt zu berechnen, wird es unmöglich, nach jedem Wert von Mark
zu sortieren . Sie müssen nach dem Ergebnis der Berechnung sortieren, also Average_Mark
.
Aus allgemeinerer Sicht können Sie ORDER BY
verwenden kein SELECT
ed-Spalte nur, wenn diese Spalte Teil der abgefragten Tabellen ist und Sie kein GROUP BY
verwenden oder DISTINCT
(es sei denn, Sie GROUP BY
diese nicht angezeigte Spalte, dann können Sie ORDER BY
es).
Der Grund ist einfach:Wenn Sie GROUP BY
verwenden oder DISTINCT
, werden mehrere Zeilen möglicherweise als eine angezeigt. Nicht angezeigte Werte in diesen "zusammengeführten" Zeilen können sich möglicherweise voneinander unterscheiden, wodurch ein ORDER BY
entsteht unmöglich auf diesen Werten.
Einige DBMS (zumindest MySQL) verhalten sich anders und erlauben ORDER
BY
eingeben nicht angezeigte Werte, auch mit GROUP BY
. Aber MySQL scheint dann nach dem ersten gefundenen Wert des nicht angezeigten Werts zu ordnen (siehe fiddle ). Denken Sie also besser daran, dass dies vermieden werden sollte, um unvorhersehbare Ergebnisse zu vermeiden.
BEARBEITEN: Siehe die Dokumentation
über MySQL GROUP BY
Handhabung.