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

GROUP BY / kebingungan fungsi agregat dalam SQL

Dalam SQL standar (tetapi bukan MySQL), saat Anda menggunakan GROUP BY, Anda harus mencantumkan semua kolom hasil yang bukan agregat dalam klausa GROUP BY. Jadi, jika order_details memiliki 6 kolom, maka Anda harus mencantumkan semua 6 kolom (berdasarkan nama - Anda tidak dapat menggunakan * dalam klausa GROUP BY atau ORDER BY) dalam klausa GROUP BY.

Anda juga dapat melakukan:

SELECT order_no, SUM(order_price)
  FROM order_details
 GROUP BY order_no;

Itu akan berhasil karena semua kolom non-agregat terdaftar dalam klausa GROUP BY.

Anda dapat melakukan sesuatu seperti:

SELECT order_no, order_price, MAX(order_item)
  FROM order_details
 GROUP BY order_no, order_price;

Kueri ini tidak terlalu berarti (atau kemungkinan besar tidak berarti), tetapi akan 'berfungsi'. Ini akan mencantumkan setiap nomor pesanan dan kombinasi harga pesanan yang terpisah, dan akan memberikan item pesanan (nomor) maksimum yang terkait dengan harga itu. Jika semua item dalam pesanan memiliki harga yang berbeda, Anda akan mendapatkan grup yang masing-masing terdiri dari satu baris. OTOH, jika ada beberapa item dalam pesanan dengan harga yang sama (katakanlah masing-masing £0,99), maka item tersebut akan dikelompokkan bersama dan mengembalikan nomor item pesanan maksimum pada harga tersebut. (Saya berasumsi tabel memiliki kunci utama pada (order_no, order_item) di mana item pertama dalam pesanan memiliki order_item = 1 , item kedua adalah 2, dst.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa topeng pemformatan tanggal Oracle untuk zona waktu?

  2. periksa apakah itu fungsi angka di Oracle

  3. Tampilan Oracle lebih dari 24 jam

  4. Menggunakan Oracle EXPAND_SQL_TEXT

  5. Oracle getConnection lambat