Penjelasan sederhana
GROUP BY mengelompokkan baris yang punya nilai sama, lalu menghitung ringkasan untuk tiap kelompok. Kalau kamu pernah memakai Pivot Table di Excel, konsepnya sama persis.
Bayangkan setumpuk struk belanja yang dipisah ke beberapa keranjang menurut kategori. Setelah itu kamu menghitung isi tiap keranjang: ada berapa struk, berapa total nilainya. Satu keranjang menjadi satu baris hasil.
Sintaks
SELECT kolom_kelompok, AGREGAT(kolom)
FROM nama_tabel
GROUP BY kolom_kelompok;
| Bagian | Keterangan |
|---|---|
kolom_kelompok | Kolom yang jadi dasar pengelompokan. Satu baris hasil untuk tiap nilai unik. |
AGREGAT(kolom) | COUNT, SUM, AVG, MIN, atau MAX yang dihitung per kelompok. |
Tanda [kurung siku] berarti bagian opsional. Kata kunci SQL tidak membedakan huruf besar-kecil, tapi menulisnya dengan huruf besar membuat query lebih mudah dibaca.
Contoh GROUP BY
Data contoh: penjualan
Tabel penjualan
| id | tanggal | karyawan_id | produk | kategori | qty | harga |
|---|---|---|---|---|---|---|
| 1 | 2026-01-05 | 4 | Laptop | Elektronik | 2 | 8500000 |
| 2 | 2026-01-12 | 6 | Printer | Elektronik | 1 | 2300000 |
| 3 | 2026-01-20 | 4 | Kursi Kantor | Furnitur | 5 | 1200000 |
| 4 | 2026-02-03 | 6 | Laptop | Elektronik | 1 | 8500000 |
| 5 | 2026-02-14 | 4 | Meja Kerja | Furnitur | 3 | 1750000 |
| 6 | 2026-02-25 | 5 | Kertas A4 | ATK | 20 | 55000 |
| 7 | 2026-03-02 | 6 | Kursi Kantor | Furnitur | 4 | 1200000 |
| 8 | 2026-03-10 | 4 | Printer | Elektronik | 2 | 2300000 |
| 9 | 2026-03-18 | 5 | Kertas A4 | ATK | 30 | 55000 |
| 10 | 2026-03-27 | 6 | Monitor | Elektronik | 3 | 1900000 |
SELECT kategori,
COUNT(*) AS transaksi,
SUM(qty * harga) AS omzet
FROM penjualan
GROUP BY kategori
ORDER BY omzet DESC;
Hasil 3 baris
| kategori | transaksi | omzet |
|---|---|---|
| Elektronik | 5 | 38100000 |
| Furnitur | 3 | 16050000 |
| ATK | 2 | 2750000 |
Elektronik menyumbang omzet terbesar. Setiap kategori jadi satu baris.
Cara kerjanya, langkah demi langkah
FROM penjualan: 10 transaksi diambil.GROUP BY kategori: transaksi dipisah ke 3 kelompok: Elektronik (5 transaksi), Furnitur (3), dan ATK (2).COUNT(*)danSUM(qty * harga)dihitung di tiap kelompok. Elektronik: 5 transaksi senilai 38.100.000.ORDER BY omzet DESC: kelompok dengan omzet terbesar ditaruh paling atas.
Dipakai untuk apa di kantor?
- Omzet per cabang, per bulan, atau per sales.
- Jumlah pelanggan per kota.
- Rata-rata nilai pesanan per kategori produk.
Kesalahan yang sering terjadi
- Menaruh kolom di
SELECTyang bukan agregat dan tidak ada diGROUP BY. Kebanyakan database menolaknya, karena tidak jelas nilai mana yang harus ditampilkan untuk satu kelompok. - Menyaring hasil hitungan kelompok dengan
WHERE. Untuk itu pakaiHAVING.
HAVING