Berikut ringkasan materi GROUP BY dan HAVING pada Microsoft SQL Server
Pengertian GROUP BY
GROUP BY digunakan untuk mengelompokkan data berdasarkan satu atau lebih kolom, biasanya dipakai bersama fungsi agregat seperti:
COUNT() untuk menghitung jumlah data
SUM() untuk menghitung total
AVG() untuk menghitung rata-rata
MAX() untuk menghitung nilai terbesar
MIN() untuk menghitung nilai terkecil
Contoh Penggunaan GROUP BY
Contoh 1: Jumlah ruang per lokasi
SELECT Lokasi, COUNT(*) AS JumlahRuang
FROM TblRuangKuliah
GROUP BY Lokasi;
Penjelasan:
Data akan dikelompokkan berdasarkan kolom Lokasi
COUNT(*) menghitung jumlah baris tiap lokasi
NULL juga dianggap sebagai satu kelompok
Contoh 2: Total kapasitas per lokasi
SELECT Lokasi, SUM(Kapasitas) AS TotalKapasitas
FROM TblRuangKuliah
GROUP BY Lokasi;
Contoh 3: Rata-rata kapasitas per lantai
SELECT Letak, AVG(Kapasitas) AS RataKapasitas
FROM TblRuangKuliah
GROUP BY Letak;
Pengertian HAVING
HAVING digunakan untuk memfilter hasil GROUP BY (bukan data awal seperti WHERE).
Perbedaan utama:
WHERE melakukan filter data sebelum grouping
HAVING melakukan filter setelah grouping
Contoh Penggunaan HAVING
Contoh 4: Lokasi dengan jumlah ruang lebih dari 1
SELECT Lokasi, COUNT() AS JumlahRuang
FROM TblRuangKuliah
GROUP BY Lokasi
HAVING COUNT() > 1;
Contoh 5: Lokasi dengan total kapasitas lebih dari 70
SELECT Lokasi, SUM(Kapasitas) AS TotalKapasitas
FROM TblRuangKuliah
GROUP BY Lokasi
HAVING SUM(Kapasitas) > 70;
Contoh 6: Lantai dengan rata-rata kapasitas ≥ 35
SELECT Letak, AVG(Kapasitas) AS RataKapasitas
FROM TblRuangKuliah
GROUP BY Letak
HAVING AVG(Kapasitas) >= 35;
Kombinasi WHERE, GROUP BY, dan HAVING
Contoh 7: Hanya Gedung A, lalu difilter
SELECT Lokasi, COUNT() AS JumlahRuang
FROM TblRuangKuliah
WHERE Lokasi = 'Gedung A'
GROUP BY Lokasi
HAVING COUNT() > 1;
Tanpa HAVING menggunakan WHERE dan Subquery
Dalam beberapa kasus, HAVING dapat digantikan dengan kombinasi WHERE dan subquery
Contoh 8:
SELECT Lokasi, COUNT() AS JumlahRuang
FROM TblRuangKuliah
GROUP BY Lokasi
HAVING COUNT() > 1;
Hasilnya sama dengan
SELECT Lokasi, JumlahRuang
FROM (
SELECT Lokasi, COUNT(*) AS JumlahRuang
FROM TblRuangKuliah
GROUP BY Lokasi
) AS tt
WHERE JumlahRuang > 1;
Kesimpulan
GROUP BY untuk mengelompokkan data
Fungsi agregat digunakan untuk menghitung tiap kelompok
HAVING untuk menyaring hasil agregasi
WHERE menyaring data sebelum dikelompokkan
Materi slide dapat dilihat di sini
