sql >> Database teknologi >  >> RDS >> Oracle

Oracle:IKKE EN GRUPPE VED UDTRYK FEJL

Prøv:

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

Når du samler flere værdier af Mark for at beregne gennemsnittet bliver det umuligt at sortere på hver værdi af Mark . Du skal sortere på resultatet af beregningen, dvs. Average_Mark .

Fra et mere generelt synspunkt har du lov til at ORDER BY en ikke SELECT ed kolonne kun, hvis denne kolonne er en del af de forespurgte tabeller, og hvis du ikke bruger nogen GROUP BY eller DISTINCT (medmindre du GROUP BY denne ikke-viste kolonne, så kan du ORDER BY det).

Årsagen er enkel:Hvis du bruger GROUP BY eller DISTINCT , vil flere rækker potentielt blive vist som én. Ikke-viste værdier i disse "sammenflettede" rækker kan potentielt være forskellige fra hinanden, hvilket gør enhver ORDER BY umuligt på disse værdier.

Nogle DBMS (minst MySQL) opfører sig anderledes, hvilket tillader ORDER ing BY ikke viste værdier, selv med GROUP BY . Men MySQL ser ud til at sortere efter den først stødte værdi af ikke-vist værdi (se spillespil ). Så det er bedst at huske på, at dette bør undgås for at forhindre uforudsigelige resultater.

EDIT: Se dokumentationen om MySQL GROUP BY håndtering.



  1. opret tabelbegrænsning i mysql

  2. Zombie PerfMon tællere, der aldrig dør!

  3. Generer SQL-sætninger med python

  4. Match 2 sql-kolonner hvis =og opdater derefter en anden kolonne med 1