Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle:KEIN GRUPPE NACH AUSDRUCK-FEHLER

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.