Perintah GROUP BY SQL
- Halaman Sebelumnya sum() SQL
- Halaman Berikutnya Having SQL
Fungsi akumulasi (seperti SUM) sering kali memerlukan kalimat GROUP BY.
Kalimat GROUP BY
Kalimat GROUP BY digunakan untuk menggabungkan fungsi akumulasi, mengelompokkan hasil set berdasarkan satu atau lebih kolom.
Grammar SQL GROUP BY
SELECT column_name, fungsi agregat (column_name) FROM table_name WHERE column_name operator value GROUP BY column_name
Contoh SQL GROUP BY
Kami memiliki tabel "Orders" di bawah ini:
O_Id | OrderDate | OrderPrice | Customer |
---|---|---|---|
1 | 2008/12/29 | 1000 | Bush |
2 | 2008/11/23 | 1600 | Carter |
3 | 2008/10/05 | 700 | Bush |
4 | 2008/09/28 | 300 | Bush |
5 | 2008/08/06 | 2000 | Adams |
6 | 2008/07/21 | 100 | Carter |
Sekarang, kami ingin mencari jumlah total untuk setiap pelanggan (total pesanan).
Kami ingin menggunakan pernyataan GROUP BY untuk menggabungkan pelanggan.
Kami menggunakan pernyataan SQL berikut:
SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer
Hasil yang didapat seperti ini:
Customer | SUM(OrderPrice) |
---|---|
Bush | 2000 |
Carter | 1700 |
Adams | 2000 |
Menarik, kan?
Biarkan kita lihat apa yang terjadi jika GROUP BY diabaikan:
SELECT Customer,SUM(OrderPrice) FROM Orders
Hasil yang didapat seperti ini:
Customer | SUM(OrderPrice) |
---|---|
Bush | 5700 |
Carter | 5700 |
Bush | 5700 |
Bush | 5700 |
Adams | 5700 |
Carter | 5700 |
Hasil yang didapat di atas bukan yang kita inginkan.
Mengapa tidak dapat digunakan pernyataan SELECT di atas? Penjelasan seperti berikut: Pernyataan SELECT di atas menentukan dua kolom (Customer dan SUM(OrderPrice)). "SUM(OrderPrice)" mengembalikan nilai tunggal (total kolom "OrderPrice"), sementara "Customer" mengembalikan enam nilai (setiap nilai untuk setiap baris di tabel "Orders"). Oleh karena itu, kami tidak mendapatkan hasil yang benar. Namun, Anda telah melihat, pernyataan GROUP BY memecahkan masalah ini.
GROUP BY lebih dari satu kolom
Kami juga dapat mengaplikasikan pernyataan GROUP BY untuk lebih dari satu kolom, seperti ini:
SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders GROUP BY Customer,OrderDate
- Halaman Sebelumnya sum() SQL
- Halaman Berikutnya Having SQL