Memfilter grup data menggunakan klausa HAVING
Ketika Anda telah membuat grup dengan klausul GROUP BY, Anda dapat memfilter hasilnya lebih lanjut. Klausa HAVING bertindak sebagai penyaring pada kelompok. Ini mirip dengan cara klausa WHERE bertindak sebagai filter pada baris yang dikembalikan oleh klausa FROM.
Klausa HAVING memungkinkan Anda membuat kondisi pencarian, secara konseptual mirip dengan predikat klausa WHERE, yang kemudian menguji setiap grup yang dikembalikan oleh klausa GROUP BY.
Contoh berikut menghitung pesanan untuk setiap pelanggan, dan memfilter hasilnya untuk menyertakan hanya pelanggan yang telah melakukan lebih dari 10 pesanan:
SELECT CustomerID,
COUNT(*) AS OrderCount
FROM Sales.SalesOrderHeader
GROUP BY CustomerID
HAVING COUNT(*) > 10;
Bandingkan HAVING dengan WHERE
Meskipun klausa HAVING dan WHERE memfilter data, ingatlah bahwa WHERE beroperasi pada baris yang dikembalikan oleh klausa FROM. Jika bagian GROUP BY ... HAVING ada di kueri Anda setelah klausa WHERE, klausa WHERE akan memfilter baris sebelum GROUP BY diproses—berpotensi membatasi grup yang bisa terbentuk.
Klausa HAVING diproses setelah GROUP BY dan hanya beroperasi pada grup, bukan baris detail. Untuk meringkas:
- Klausa WHERE memfilter baris sebelum grup apa pun terbentuk
- Klausa HAVING memfilter seluruh grup, dan biasanya melihat hasil agregasi.