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.