Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle:BUKAN GROUP DENGAN KESALAHAN EKSPRESI

Coba:

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

Saat Anda menggabungkan beberapa nilai Mark untuk menghitung rata-rata, menjadi tidak mungkin untuk mengurutkan setiap nilai Mark . Anda harus mengurutkan berdasarkan hasil perhitungan, yaitu Average_Mark .

Dari sudut pandang yang lebih umum, Anda diperbolehkan untuk ORDER BY bukan SELECT ed kolom hanya jika kolom ini adalah bagian dari tabel yang ditanyakan dan jika Anda tidak menggunakan GROUP BY atau DISTINCT (kecuali Anda GROUP BY kolom yang tidak ditampilkan ini, maka Anda dapat ORDER BY itu).

Alasannya sederhana:Jika Anda menggunakan GROUP BY atau DISTINCT , beberapa baris akan berpotensi ditampilkan sebagai satu. Nilai yang tidak ditampilkan di baris "gabungan" tersebut berpotensi berbeda satu sama lain, membuat ORDER BY apa pun tidak mungkin pada nilai-nilai tersebut.

Beberapa DBMS (setidaknya MySQL) berperilaku berbeda, memungkinkan ORDER menggunakan BY nilai yang tidak ditampilkan, bahkan dengan GROUP BY . Tetapi MySQL tampaknya kemudian mengurutkan berdasarkan nilai pertama yang ditemukan dari nilai yang tidak ditampilkan (lihat biola ). Jadi, lebih baik diingat bahwa ini harus dihindari, untuk mencegah hasil yang tidak terduga.

EDIT: Lihat dokumentasi tentang MySQL GROUP BY penanganan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menggunakan fungsi sql asli dengan permintaan HQL?

  2. Cara membagi objek CLOB menggunakan , dan :pembatas di Oracle menjadi beberapa catatan

  3. Mengapa Oracle tidak memberi tahu Anda tabel atau tampilan MANA yang tidak ada?

  4. Menggunakan Oracle EXPAND_SQL_TEXT

  5. Bagaimana saya bisa menerjemahkan ID ID FileNet di DB2/Oracle menjadi GUID yang ramah?