Dalam dunia pengolahan data, seringkali kita tidak hanya butuh melihat data satu per satu, tapi juga butuh meringkasnya menjadi informasi yang lebih bermakna. Misalnya, berapa total penjualan per kota, berapa rata-rata gaji per departemen, atau berapa jumlah pesanan per pelanggan. Di sinilah GROUP BY dan fungsi agregasi berperan penting dalam SQL.
Apa itu GROUP BY?
GROUP BY adalah klausa SQL yang digunakan untuk mengelompokkan baris-baris data yang memiliki nilai sama pada satu atau lebih kolom menjadi satu grup. Setelah data dikelompokkan, kita biasanya menerapkan fungsi agregasi pada tiap grup tersebut untuk menghasilkan ringkasan.
Sintaks dasarnya:
SELECT kolom, FUNGSI_AGREGAT(kolom_lain)
FROM nama_tabel
GROUP BY kolom;
Tanpa GROUP BY, fungsi agregasi akan menghitung nilai untuk seluruh tabel sebagai satu kesatuan. Dengan GROUP BY, perhitungan dilakukan per kelompok data.
Fungsi Agregasi Utama
1. COUNT() — Menghitung Jumlah Baris
COUNT() digunakan untuk menghitung jumlah baris dalam suatu grup atau tabel.
Contoh hasil:
| departemen | jumlah_karyawan |
|---|---|
| IT | 12 |
| Marketing | 8 |
| Keuangan | 5 |
Query ini menghitung berapa banyak karyawan di masing-masing departemen. Perlu diperhatikan, COUNT(*) menghitung semua baris termasuk yang memiliki nilai NULL, sedangkan COUNT(nama_kolom) hanya menghitung baris dengan nilai yang tidak NULL pada kolom tersebut.
2. SUM() — Menjumlahkan Nilai
SUM() digunakan untuk menjumlahkan seluruh nilai numerik dalam suatu grup.
Contoh hasil:
| kota | total_per_kota |
|---|---|
| Semarang | 25.000.000 |
| Jakarta | 48.500.000 |
| Surabaya | 31.200.000 |
Query ini berguna misalnya untuk melihat total pendapatan dari tiap kota tempat transaksi dilakukan.
3. AVG() — Menghitung Rata-rata
AVG() digunakan untuk menghitung nilai rata-rata dari sekumpulan data numerik.
Contoh hasil:
| departemen | rata_rata_gaji |
|---|---|
| IT | 8.500.000 |
| Marketing | 6.750.000 |
| Keuangan | 7.200.000 |
Fungsi ini sangat membantu untuk analisis, seperti mengetahui rata-rata gaji per departemen atau rata-rata nilai ujian per kelas.
Fungsi Agregasi Lainnya
Selain tiga fungsi di atas, SQL juga menyediakan:
MIN()— mengambil nilai terkecil dalam grupMAX()— mengambil nilai terbesar dalam grup
Kelima fungsi ini (COUNT, SUM, AVG, MIN, MAX) adalah fungsi agregasi paling umum digunakan dalam SQL.
Menggunakan GROUP BY dengan Banyak Kolom
GROUP BY juga bisa menggunakan lebih dari satu kolom sekaligus, sehingga pengelompokan menjadi lebih detail.
SELECT departemen, jabatan, COUNT(*) AS jumlah
FROM karyawan
GROUP BY departemen, jabatan;
Query ini mengelompokkan data berdasarkan kombinasi departemen dan jabatan, sehingga hasilnya lebih spesifik.
Menyaring Hasil Agregasi dengan HAVING
Salah satu hal penting yang sering membingungkan pemula adalah perbedaan antara WHERE dan HAVING. Klausa WHERE menyaring baris sebelum data dikelompokkan, sedangkan HAVING menyaring hasil setelah data dikelompokkan dan diagregasi.
SELECT departemen, COUNT(*) AS jumlah_karyawan
FROM karyawan
GROUP BY departemen
HAVING COUNT(*) > 5;
Query di atas hanya menampilkan departemen yang memiliki lebih dari 5 karyawan. Ini tidak bisa dilakukan dengan WHERE, karena WHERE tidak dapat mengakses hasil fungsi agregasi.
Aturan Penting saat Menggunakan GROUP BY
- Kolom pada SELECT harus konsisten. Setiap kolom yang tidak berada dalam fungsi agregasi pada bagian
SELECTharus juga muncul diGROUP BY. - Urutan eksekusi klausa SQL. Secara logis, SQL memproses
FROM→WHERE→GROUP BY→HAVING→SELECT→ORDER BY. Memahami urutan ini membantu menghindari kesalahan umum. - Gunakan alias agar hasil lebih mudah dibaca, seperti
AS total_penjualanatauAS rata_rata_gaji.
Contoh Kasus Lengkap
Misalkan kita punya tabel pesanan dengan kolom id_pelanggan, nama_produk, dan jumlah_harga. Kita ingin mengetahui total belanja tiap pelanggan yang telah melakukan lebih dari 3 kali transaksi.
SELECT id_pelanggan,
COUNT(*) AS jumlah_transaksi,
SUM(jumlah_harga) AS total_belanja,
AVG(jumlah_harga) AS rata_rata_belanja
FROM pesanan
GROUP BY id_pelanggan
HAVING COUNT(*) > 3
ORDER BY total_belanja DESC;
Query ini menggabungkan GROUP BY, tiga fungsi agregasi sekaligus, HAVING, dan ORDER BY dalam satu query untuk menghasilkan laporan yang informatif.
Kesimpulan
GROUP BY dan fungsi agregasi seperti COUNT, SUM, dan AVG adalah fondasi penting dalam analisis data menggunakan SQL. Dengan memahami cara kerja keduanya, kita bisa mengubah data mentah yang jumlahnya ribuan atau bahkan jutaan baris menjadi ringkasan yang mudah dipahami dan siap digunakan untuk pengambilan keputusan. Menguasai kombinasi GROUP BY, HAVING, dan fungsi agregasi adalah keterampilan dasar yang wajib dimiliki siapa pun yang bekerja dengan data.