Veri gruplama işlemlerine bazı durumlarda, gruplanarak getirilecek veriler üzerinde bir filtreleme ihtiyacı olabilir. GROUP BY kullanıldığı durumlarda, SELECT ile birlikte WHERE ifadesi kullanılarak gruplanacak verilere alan bazında sınırlamalar getirilebilir. Gruplama fonksiyonları sonucunda elde edilen değere göre filtreleme işlemi yapılmak istenildiğinde ise HAVING ifadesi kullanılmalıdır. Örneğin; SQL cümlemize HAVING COUNT(AlanAdı)>10 gibi bir ifade ilave edilebilir. HAVING, sadece gruplama fonksiyonları içeren şart ifadelerini kullanabilir.
WHERE ve HAVING ifadelerinin GROUP BY ile birlikte kullanımları şu şekildedir:
SELECT GruplanacakAlanAdı, GruplamaFonksiyonu1(AlanAdı1) From TabloAdı Where Şart veya Şartlar GROUP BY GruplanacakAlanAdı HAVING GrupFonksiyonu Şartı veya Şartları ORDER BY SıralanacakAlanAdı
Bu kullanımda ifadelerin sıralamaları yukarıdaki gibi olmalıdır. Yani ,
- WHERE ifadesi her zaman GROUP BY’dan önce kullanılmalıdır.
- HAVING ifadesi her zaman GROUP BY’dan sonra kullanılmalıdır.
- ORDER BY her zaman GROUP BY’dan sonra kullanılmalıdır.
Son örnek olarak Production.Product tablosunda kırmızı veya mavi renkli ürünlerin Class bilgisine göre gruplanması, en az 5 kaydı olan Class kayıtlarının listelenmesi ve sonuçların Class adına göre sıralanması istendiğinde ekrandaki sorgu cümlesi kullanılabilir.
SELECT Class, COUNT(ProductId) FROM Production.Product WHERE Color ='Red' OR Color='Blue' GROUP BY Class HAVING COUNT(ProductId) > 5 ORDER BY Class