Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle:NIE GRUPA WEDŁUG BŁĘDU WYRAŻENIA

Wypróbuj:

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

Gdy agregujesz kilka wartości Mark aby obliczyć średnią, niemożliwe staje się sortowanie według każdej wartości Mark . Musisz posortować według wyniku obliczeń, tj. Average_Mark .

Z bardziej ogólnego punktu widzenia możesz ORDER BY nie SELECT ed kolumna tylko wtedy, gdy ta kolumna jest częścią żądanych tabel i jeśli nie używasz żadnego GROUP BY lub DISTINCT (chyba że GROUP BY tej niewyświetlanej kolumny, możesz ORDER BY to).

Powód jest prosty:jeśli używasz GROUP BY lub DISTINCT , kilka wierszy będzie potencjalnie wyświetlanych jako jeden. Niewyświetlane wartości w tych „scalonych” wierszach mogą potencjalnie różnić się od siebie, tworząc dowolne ORDER BY niemożliwe dla tych wartości.

Niektóre DBMS (przynajmniej MySQL) zachowują się inaczej, umożliwiając ORDER ing BY niewyświetlane wartości, nawet z GROUP BY . Ale MySQL wydaje się wtedy porządkować według pierwszej napotkanej wartości niewyświetlanej wartości (patrz fiddle ). Dlatego lepiej pamiętaj, że należy tego unikać, aby zapobiec nieprzewidywalnym wynikom.

EDYTUJ: Zobacz dokumentację o MySQL GROUP BY obsługa.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. użyj LIKE i IN z podzapytaniem w sql

  2. Oblicz różnicę czasu w SQL z przesunięciami

  3. błąd prawego nawiasu ORA-00907 w Oracle

  4. Jak znaleźć numer linii, nazwę procedury w PL/SQL w przypadku błędu?

  5. Alternatywa dla POWROTU z INSERT...SELECT