Veri gruplama işlemlerine bazı durumlarda, gruplanarak getirilecek veriler üzerinde 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ını içeren şart ifadelerini kullanabilir.
WHERE ve HAVING ifadelerinin GROUP BY ile birlikte kullanımları şu şekildedir;
1 2 3 4 5 6 | SELECT GruplanacakAlanAdi, GruplamaFonksiyonu1(AlanAdi1) FROM TabloAdi WHERE Şart veya Şartlar GROUP BY GruplanacakAlanAdi HAVING GrupFonksiyonu Sarti veya Sartlari ORDER BY SiralanacakAlanAdi |
Bu kullanımda ifadelerin sıralamaları ekrandaki 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.
Örnek Kullanımı;
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ı istedndiğinde ekrandaki sorgu cümlesi kullanılabilir.
1 2 3 4 5 6 | SELECT Class, COUNT(ProductId) FROM Production.Product WHERE Color = 'Red' OR Color = 'Blue' GROUP BY Class HAVING COUNT (ProductId) > 5 ORDER BY Class |