Perintah GROUP BY
📚 Pengenalan Perintah GROUP BY
Perintah GROUP BY digunakan untuk mengelompokkan baris yang memiliki nilai yang sama ke dalam baris ringkasan. Ini sering digunakan dengan fungsi agregat (COUNT, SUM, AVG, MIN, MAX) untuk menghitung nilai untuk setiap grup.
Sintaks GROUP BY
Sintaks untuk GROUP BY adalah:
SELECT kolom1, fungsi_agregat(kolom2) FROM nama_tabel WHERE kondisi GROUP BY kolom1 ORDER BY kolom1;
Contoh Tabel
Misalkan kita memiliki tabel 'pesanan' dengan data berikut:
| id | pelanggan_id | produk | jumlah | tanggal |
|---|---|---|---|---|
| 101 | 1 | Laptop | 15000000 | 2023-01-15 |
| 102 | 2 | Mouse | 250000 | 2023-01-20 |
| 103 | 1 | Keyboard | 750000 | 2023-02-05 |
| 104 | 3 | Laptop | 12000000 | 2023-02-10 |
| 105 | 2 | Monitor | 3000000 | 2023-02-15 |
Contoh GROUP BY
Untuk menghitung total pesanan per pelanggan:
SELECT pelanggan_id, COUNT(id) AS jumlah_pesanan, SUM(jumlah) AS total_belanja FROM pesanan GROUP BY pelanggan_id;
Hasilnya akan menjadi:
| pelanggan_id | jumlah_pesanan | total_belanja |
|---|---|---|
| 1 | 2 | 15750000 |
| 2 | 2 | 3250000 |
| 3 | 1 | 12000000 |
GROUP BY dengan JOIN
Anda dapat menggabungkan GROUP BY dengan JOIN untuk mengelompokkan data dari beberapa tabel:
SELECT p.nama, COUNT(pe.id) AS jumlah_pesanan, SUM(pe.jumlah) AS total_belanja FROM pelanggan AS p INNER JOIN pesanan AS pe ON p.id = pe.pelanggan_id GROUP BY p.id, p.nama;
GROUP BY dengan Beberapa Kolom
Anda dapat mengelompokkan berdasarkan beberapa kolom:
SELECT pelanggan_id, produk, COUNT(id) AS jumlah_pesanan, SUM(jumlah) AS total_belanja FROM pesanan GROUP BY pelanggan_id, produk;
GROUP BY dengan WHERE
Anda dapat menggabungkan GROUP BY dengan WHERE untuk memfilter data sebelum pengelompokkan:
SELECT pelanggan_id, COUNT(id) AS jumlah_pesanan, SUM(jumlah) AS total_belanja FROM pesanan WHERE tanggal >= '2023-02-01' GROUP BY pelanggan_id;
GROUP BY dengan ORDER BY
Anda dapat mengurutkan hasil dari GROUP BY:
SELECT pelanggan_id, COUNT(id) AS jumlah_pesanan, SUM(jumlah) AS total_belanja FROM pesanan GROUP BY pelanggan_id ORDER BY total_belanja DESC;
GROUP BY dengan Fungsi Agregat
Anda dapat menggunakan berbagai fungsi agregat dengan GROUP BY:
-- Menghitung jumlah pesanan per pelanggan SELECT pelanggan_id, COUNT(id) AS jumlah_pesanan FROM pesanan GROUP BY pelanggan_id; -- Menghitung total belanja per pelanggan SELECT pelanggan_id, SUM(jumlah) AS total_belanja FROM pesanan GROUP BY pelanggan_id; -- Menghitung rata-rata belanja per pelanggan SELECT pelanggan_id, AVG(jumlah) AS rata_rata_belanja FROM pesanan GROUP BY pelanggan_id; -- Menghitung belanja minimum dan maksimum per pelanggan SELECT pelanggan_id, MIN(jumlah) AS belanja_minimum, MAX(jumlah) AS belanja_maksimum FROM pesanan GROUP BY pelanggan_id;
GROUP BY dengan Ekspresi
Anda dapat menggunakan ekspresi dalam GROUP BY:
-- Mengelompokkan berdasarkan bulan
SELECT YEAR(tanggal) AS tahun, MONTH(tanggal) AS bulan, COUNT(id) AS jumlah_pesanan
FROM pesanan
GROUP BY YEAR(tanggal), MONTH(tanggal);
-- Mengelompokkan berdasarkan kategori harga
SELECT
CASE
WHEN jumlah < 1000000 THEN 'Murah'
WHEN jumlah < 5000000 THEN 'Sedang'
ELSE 'Mahal'
END AS kategori_harga,
COUNT(id) AS jumlah_pesanan
FROM pesanan
GROUP BY
CASE
WHEN jumlah < 1000000 THEN 'Murah'
WHEN jumlah < 5000000 THEN 'Sedang'
ELSE 'Mahal'
END;
GROUP BY dengan ROLLUP
Beberapa sistem database mendukung ROLLUP untuk membuat subtotal:
SELECT pelanggan_id, produk, SUM(jumlah) AS total_belanja FROM pesanan GROUP BY ROLLUP (pelanggan_id, produk);
Catatan: ROLLUP mungkin tidak didukung di semua sistem database. Di MySQL, Anda dapat menggunakan WITH ROLLUP.
GROUP BY dengan CUBE
Beberapa sistem database mendukung CUBE untuk membuat semua kombinasi subtotal:
SELECT pelanggan_id, produk, SUM(jumlah) AS total_belanja FROM pesanan GROUP BY CUBE (pelanggan_id, produk);
Catatan: CUBE mungkin tidak didukung di semua sistem database.
Coba Sendiri
Anda dapat mencoba kode SQL di atas di editor berikut:
💡 Tips Perintah GROUP BY
Saat menggunakan GROUP BY, setiap kolom di SELECT harus berada dalam GROUP BY atau digunakan dalam fungsi agregat. Jika tidak, Anda akan mendapatkan error. Ini adalah aturan penting yang perlu diingat saat menulis query dengan GROUP BY.