DML: SELECT dengan GROUP BY
Pernyataan GROUP BY dalam SQL digunakan dengan pernyataan SELECT untuk menyusun data yang identik menjadi kelompok. Pernyataan GROUP BY muncul setelah setiap pernyataan WHERE, tetapi sebelum pernyataan ORDER BY atau HAVING. Sering digunakan dengan fungsi agregat (COUNT, MAX, MIN, SUM, AVG) untuk mengelompokkan hasil set oleh satu atau beberapa kolom.
Sintaks Dasar
SELECT nama_kolom, fungsi_agregat(nama_kolom)
FROM nama_tabel
WHERE kondisi
GROUP BY nama_kolom;- nama_kolom: Kolom yang ingin Anda pilih.
- fungsi_agregat(nama_kolom): Fungsi agregat (mis.,
SUM,COUNT,MIN,MAX,AVG). - nama_tabel: Tabel dari mana untuk memilih.
- kondisi: Klausa opsional untuk menyaring baris.
- GROUP BY nama_kolom: Kolom untuk mengelompokkan data.
Contoh 1
Mari kita mulai dengan contoh dasar:
Tabel “order”
| order_id | customer_id | product_id |
|---|---|---|
| 1 | 3 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 3 |
| 4 | 5 | 1 |
Untuk menghitung jumlah pesanan untuk setiap produk, kita dapat menggunakan pernyataan GROUP BY sebagai berikut:
SELECT product_id, COUNT(order_id) as jumlah_pesanan
FROM order
GROUP BY product_id;Hasil-set:
| product_id | jumlah_pesanan |
|---|---|
| 1 | 2 |
| 2 | 1 |
| 3 | 1 |
Hasil-set menunjukkan bahwa product_id 1 telah dipesan dua kali, dan product_id 2 dan product_id 3 telah dipesan satu kali.
Contoh 2 - Menggunakan GROUP BY dengan Klausa WHERE
Kita dapat menggunakan klausa GROUP BY dengan klausa WHERE untuk menyaring catatan sebelum pengelompokan.
SELECT product_id, COUNT(order_id) as jumlah_pesanan
FROM order
WHERE customer_id > 2
GROUP BY product_id;Hasil-set:
| product_id | jumlah_pesanan |
|---|---|
| 1 | 2 |
| 3 | 1 |
Hasil-set menunjukkan jumlah pesanan untuk setiap produk, tetapi hanya mencakup pesanan dari pelanggan dengan customer_id lebih besar dari 2.
Contoh 3 - Menggunakan GROUP BY dengan Klausa HAVING
Klausa HAVING ditambahkan ke SQL karena kata kunci WHERE tidak dapat digunakan dengan fungsi agregat. Kita dapat menggunakan klausa HAVING untuk menyaring hasil dari klausa GROUP BY.
SELECT product_id, COUNT(order_id) as jumlah_pesanan
FROM order
GROUP BY product_id
HAVING COUNT(order_id) > 1;Hasil-set:
| product_id | jumlah_pesanan |
|---|---|
| 1 | 2 |
Hasil-set hanya mencakup produk yang telah dipesan lebih dari satu kali.
Contoh 4 - Menggunakan GROUP BY dengan Klausa JOIN
Klausa GROUP BY juga dapat digunakan dengan klausa JOIN untuk mengelompokkan data dari beberapa tabel.
Pertimbangkan tabel baru “product”:
Tabel “product”
| product_id | product_name | price |
|---|---|---|
| 1 | Apple | 1.00 |
| 2 | Banana | 0.50 |
| 3 | Cherry | 2.00 |
Untuk mendapatkan harga total untuk setiap produk yang dijual, kita dapat bergabung dengan tabel “order” dan tabel “product” dan mengelompokkan hasil berdasarkan nama produk.
SELECT product.product_name, COUNT(order.order_id) as jumlah_pesanan, SUM(product.price) as total_harga
FROM order
JOIN product
ON order.product_id = product.product_id
GROUP BY product.product_name;Hasil-set:
| product_name | jumlah_pesanan | total_harga |
|---|---|---|
| Apple | 2 | 2.00 |
| Banana | 1 | 0.50 |
| Cherry | 1 | 2.00 |
Hasil-set menunjukkan harga total untuk setiap produk yang dijual berdasarkan jumlah pesanan.
- SQL GROUP BY Statement - W3Schools
- The GROUP BY Statement in SQL - SQL Tutorial
- SQL Aggregate Functions - W3Schools
- SQL HAVING Clause - SQL Server Tutorial
- Using JOINs in SQL Server - Microsoft Docs
- Filtering Data with WHERE Clause in SQL Server - SQL Server Tutorial
- Using GROUP BY with COUNT - Mode Analytics