Hari 13: HAVING — Filter Setelah GROUP BY
50 min
Last updated 25 Mar 2026
WHERE vs HAVING
| WHERE | HAVING |
|---|---|
| Filter sebelum agregasi | Filter setelah agregasi |
| Tidak bisa pakai fungsi agregat | Bisa pakai COUNT, SUM, AVG, dll |
| Pada baris individual | Pada hasil GROUP BY |
-- Kota dengan lebih dari 2 pelanggan
SELECT kota, COUNT(*) AS jumlah
FROM pelanggan
GROUP BY kota
HAVING COUNT(*) > 2;
-- Kategori produk dengan rata-rata harga > 1juta
SELECT kategori_id,
COUNT(*) AS jumlah_produk,
ROUND(AVG(harga), 0) AS rata_harga
FROM produk
GROUP BY kategori_id
HAVING AVG(harga) > 1000000;
-- Kombinasi WHERE + GROUP BY + HAVING
SELECT kota, COUNT(*) AS jumlah
FROM pelanggan
WHERE status = 'aktif' -- filter baris dulu
GROUP BY kota
HAVING COUNT(*) >= 2 -- filter kelompok
ORDER BY jumlah DESC;
💡
Notice: HAVING diletakkan setelah GROUP BY, sebelum ORDER BY.
Assignment
Tampilkan metode_bayar yang total pendapatannya di atas 10.000.000. Tampilkan metode_bayar, jumlah_transaksi, dan total_pendapatan.
Expected output:
3 row(s) returned
SQL
query.sql
Solution
Output
⏳ Loading DB...