J. Having
HAVING dalam SQL digunakan untuk menyaring hasil setelah pengelompokan data dengan query GROUP BY
. Dengan kata lain, HAVING berfungsi seperti WHERE
, tetapi diterapkan pada hasil dari agregat, seperti SUM()
, COUNT()
, AVG()
, dll.
Perbedaan WHERE
dengan HAVING
:
WHERE
: digunakan untuk menyaring baris sebelum pengelompokan terjadiHAVING
: digunakan untuk menyaring agregat setelah pengelompokan terjadi
Querynya adalah seperti ini:
SELECT kolom1, kolom2, AGGREGATE_FUNCTION(kolom3)
FROM nama_tabel
WHERE kondisi
GROUP BY kolom1, kolom2
HAVING kondisi_aggregat;
Contoh Misalkan kita memiliki tabel penjualan :
id | produk | kategori | jumlah_terjual |
---|---|---|---|
1 | Laptop | Elektronik | 5 |
2 | Televisi | Elektronik | 10 |
3 | Laptop | Elektronik | 3 |
4 | Sofa | Furniture | 7 |
5 | Meja | Furniture | 2 |
Jika kita ingin mengetahui kategori produk yang memiliki total penjualan lebih dari 10, kita bisa menggunakan query HAVING
:
SELECT kategori, SUM(jumlah_terjual) AS total_penjualan
FROM penjualan
GROUP BY kategori
HAVING SUM(jumlah_terjual) > 10;
Contoh Soal
Agar kita cepat paham kita latihan soal. Buat terlebih dahulu tabelnya
CREATE TABLE eskul (
id INT PRIMARY KEY,
nama_siswa VARCHAR(50),
kelas CHAR(10),
nama_eskul VARCHAR(50),
tanggal_daftar DATE
);
insert datanya
INSERT INTO `eskul` (`id`, `nama_siswa`, `kelas`, `nama_eskul`, `tanggal_daftar`) VALUES
('1', 'Adi', 'X RPL', 'Futsal', '2024-10-01'),
('2', 'Adi', 'X RPL', 'Basket', '2024-10-17'),
('3', 'Budi', 'X TKJ', 'Futsal', '2024-10-01'),
('4', 'Cherry', 'XI RPL', 'Futsal', '2024-10-01'),
('5', 'Cherry', 'XI RPL', 'Basket', '2024-10-24');
Soal :
1. Tampilkan nama eksul dan jumlah siswa yang mendaftar di setiap kegiatan ekstrakurikuler
2. Tampilkan jumlah siswa yang mendaftar di lebih dari satu kegiatan ekstrakurikuler
3. Tampilkan jumlah siswa yang mendaftar di tanggal 2024-10-01