HAVING di SQL

Menyaring kelompok hasil GROUP BY berdasarkan nilai agregatnya. WHERE menyaring baris, HAVING menyaring kelompok.

Penjelasan sederhana

HAVING menyaring kelompok hasil GROUP BY berdasarkan nilai ringkasannya. Misalnya "tampilkan hanya produk yang total terjualnya minimal 5 unit".

Bedanya dengan WHERE: WHERE menyaring baris mentah sebelum dikelompokkan, sedangkan HAVING menyaring kelompok setelah dihitung. Karena itu SUM, COUNT, dan teman-temannya hanya bisa dipakai di HAVING.

Sintaks

SELECT kolom, AGREGAT(kolom)
FROM nama_tabel
GROUP BY kolom
HAVING kondisi_agregat;
BagianKeterangan
kondisi_agregatKondisi yang memakai fungsi agregat, misalnya SUM(qty) > 10.

Tanda [kurung siku] berarti bagian opsional. Kata kunci SQL tidak membedakan huruf besar-kecil, tapi menulisnya dengan huruf besar membuat query lebih mudah dibaca.

Contoh HAVING

Data contoh: penjualan

Tabel penjualan

idtanggalkaryawan_idprodukkategoriqtyharga
1 2026-01-05 4 Laptop Elektronik 2 8500000
2 2026-01-12 6 Printer Elektronik 1 2300000
3 2026-01-20 4 Kursi Kantor Furnitur 5 1200000
4 2026-02-03 6 Laptop Elektronik 1 8500000
5 2026-02-14 4 Meja Kerja Furnitur 3 1750000
6 2026-02-25 5 Kertas A4 ATK 20 55000
7 2026-03-02 6 Kursi Kantor Furnitur 4 1200000
8 2026-03-10 4 Printer Elektronik 2 2300000
9 2026-03-18 5 Kertas A4 ATK 30 55000
10 2026-03-27 6 Monitor Elektronik 3 1900000
query.sql
SELECT produk,
       SUM(qty) AS total_unit
FROM penjualan
GROUP BY produk
HAVING SUM(qty) >= 5
ORDER BY total_unit DESC;
>_ Jalankan & ubah query ini di browser

Hasil 2 baris

produktotal_unit
Kertas A4 50
Kursi Kantor 9

Hanya produk yang total terjualnya minimal 5 unit.

Cara kerjanya, langkah demi langkah

  1. FROM penjualan: 10 transaksi diambil.
  2. GROUP BY produk: transaksi dikelompokkan menurut nama produk, jadi 6 kelompok.
  3. SUM(qty) dihitung per produk: Kertas A4 50, Kursi Kantor 9, dan Laptop, Printer, Meja Kerja, Monitor masing-masing 3.
  4. HAVING SUM(qty) >= 5: hanya Kertas A4 dan Kursi Kantor yang lolos.
  5. ORDER BY total_unit DESC: diurutkan dari yang terbanyak.

Dipakai untuk apa di kantor?

  • Mencari pelanggan yang belanja lebih dari 3 kali.
  • Mencari kategori dengan omzet di atas target.
  • Menemukan data duplikat (kelompok yang jumlahnya lebih dari 1).

Kesalahan yang sering terjadi

  • Menulis WHERE SUM(qty) >= 5. Database menolak karena WHERE dijalankan sebelum data dikelompokkan.
  • Memakai HAVING untuk syarat biasa seperti kota = 'Jakarta'. Bisa jalan, tapi lebih lambat. Syarat yang tidak memakai agregat sebaiknya di WHERE.
Progres bab Agregat & Grouping 0/6 dipelajari
Lanjut: INNER JOIN

Belajar SQL bareng mentor

Hafal sintaks itu mudah. Menjawab pertanyaan bisnis, itu skill.

Private Class Python & SQL untuk Data: dari query dasar sampai JOIN dan studi kasus kerja, dengan kurikulum dan jadwal yang menyesuaikan kamu.

Lihat Private Class