GROUP BY dan HAVING

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

Mungkin Anda Menyukai

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *