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 terjadi
  • HAVING : digunakan untuk menyaring agregat setelah pengelompokan terjadi

Querynya adalah seperti ini:

Query HAVING
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:

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

Buat tabel eskul
CREATE TABLE eskul (
    id INT PRIMARY KEY,
    nama_siswa VARCHAR(50),
    kelas CHAR(10),
    nama_eskul VARCHAR(50),
    tanggal_daftar DATE
);

insert datanya

insert tabel eskul
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