Materi
WHERE menyaring baris sebelum dikelompokkan; HAVING menyaring kelompok setelah fungsi agregatnya dihitung. Keduanya bisa dipakai dalam satu kueri dan tidak saling menggantikan.
SELECT kota, COUNT(*) FROM pelanggan GROUP BY kota HAVING COUNT(*) >= 2;Syarat di HAVING hampir selalu memuat fungsi agregat, karena yang disaring adalah hasil hitungan tiap kelompok: jumlah anggotanya, totalnya, atau rata-ratanya.
Urutan kerja lengkapnya: FROM mengambil tabel, WHERE membuang baris, GROUP BY membentuk kelompok, HAVING membuang kelompok, ORDER BY mengurutkan yang tersisa, LIMIT memotong hasilnya.
HAVING menerima fungsi agregat yang tidak ditampilkan di SELECT: menyaring dengan SUM(stok) > 100 tetap sah walaupun kolom hasilnya hanya memuat kategori dan jumlah produknya. Kelompok yang seluruh anggotanya sudah dibuang WHERE tidak pernah terbentuk, jadi kelompok kosong tidak perlu disaring lagi.