GROUP BY mengelompokkan baris berdasarkan nilai kolom tertentu, biasanya dikombinasikan dengan fungsi agregat.
SELECT departemen, COUNT(*) as jumlah, AVG(gaji) as rata_gaji
FROM karyawan
GROUP BY departemen;
Hasil:
| departemen | jumlah | rata_gaji |
|---|---|---|
| IT | 5 | 8500000 |
| HR | 3 | 6200000 |
| Marketing | 4 | 7100000 |
HAVING — filter setelah GROUP BY:
SELECT departemen, COUNT(*) as jumlah
FROM karyawan
GROUP BY departemen
HAVING COUNT(*) > 3;
-- Hanya tampilkan departemen dengan lebih dari 3 karyawan
WHERE vs HAVING:
WHEREmemfilter baris sebelum pengelompokanHAVINGmemfilter grup setelah pengelompokan
SELECT departemen, AVG(gaji) as rata_gaji
FROM karyawan
WHERE status = 'aktif' -- Filter baris dulu
GROUP BY departemen
HAVING AVG(gaji) > 7000000; -- Filter grup