sql >> Databasteknik >  >> RDS >> Oracle

Oracle:INTE ETT GRUPP VID UTTRYCKSFEL

Försök:

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 aggregerar flera värden för Mark för att beräkna medelvärdet blir det omöjligt att sortera på varje värde av Mark . Du måste sortera på resultatet av beräkningen, dvs Average_Mark .

Ur en mer allmän synvinkel är det tillåtet att ORDER BY en icke SELECT ed kolumn endast om denna kolumn är en del av de efterfrågade tabellerna och om du inte använder någon GROUP BY eller DISTINCT (såvida du inte GROUP BY denna ej visade kolumn, då kan du ORDER BY det).

Anledningen är enkel:Om du använder GROUP BY eller DISTINCT , kommer flera rader potentiellt att visas som en. Ej visade värden i de "sammanslagna" raderna kan eventuellt skilja sig från varandra, vilket gör vilken som helst ORDER BY omöjligt på dessa värden.

Vissa DBMS (minst MySQL) beter sig annorlunda, vilket tillåter ORDER ing BY ej visade värden, även med GROUP BY . Men MySQL verkar då sorteras efter det första påträffade värdet av icke-visat värde (se fiol ). Så det är bättre att komma ihåg att detta bör undvikas för att förhindra oförutsägbara resultat.

EDIT: Se dokumentationen om MySQL GROUP BY hantering.



  1. Hierarkisk fråga - Räknar poster som tillhör överordnade och underordnade platser

  2. Entity-Framework -> MySql ger "Timeout för funktionsutvärdering."

  3. Rails 5:gruppera poster efter DateTime-fält i trädvyn

  4. Hur man kontrollerar vad användare kan dekryptera SQL Server Symmetric Key Encryption