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.)