Veri gruplama, tüm verileri mantıksal kümelere ayırmanıza olanak tanır ve bu, istatistiksel hesaplamaların her grupta ayrı ayrı yapılmasını mümkün kılar.
Gruplar, SELECT operatörünün GROUP BY ifadesi kullanılarak oluşturulur. Bir örnek düşünelim.
Run SQLSELECT Product, SUM(Quantity) AS Product_num
FROM Sumproduct
GROUP BY Product
Bu taleple birlikte her ay satılan ürün adetlerine ilişkin bilgileri çıkardık. SELECT operatörü iki sütunun çıktısını almayı emreder Ürün - ürünün adı ve Ürün_num - satılan ürünlerin miktarını görüntülemek için oluşturduğumuz hesaplanan alan (alan formülü SUM(Quantity)). GROUP BY cümlesi, DBMS'ye verileri Ürün sütununa göre gruplandırmasını söyler.
Bir tablodaki satırları filtrelediğimiz gibi, gruplandırılmış verileri de filtreleyebiliriz. Bunun için SQL'de HAVING operatörü bulunmaktadır. Önceki örneği ele alalım ve grup filtrelemeyi ekleyelim.
Run SQLSELECT Product, SUM(Quantity) AS Product_num
FROM Sumproduct
GROUP BY Product
HAVING SUM(Quantity) > 4000
Her ürün için satılan ürün sayısı hesaplandıktan sonra DBMS'nin 4.000 adetten az satılan ürünleri "kestiğini" görüyoruz.
Gördüğünüz gibi HAVING operatörü, WHERE operatörüne çok benziyor ancak aralarında önemli bir fark var: WHERE verileri gruplandırılmadan önce, HAVING ise gruplandırıldıktan sonra filtreliyor. Böylece WHERE cümlesi ile kaldırılan satırlar gruba dahil edilmeyecektir. Yani WHERE ve HAVING operatörleri aynı cümlede kullanılabilir. Bir örnek düşünün:
Run SQLSELECT Product, SUM(Quantity) AS Product_num
FROM Sumproduct
WHERE Product <> 'Skis Long'
GROUP BY Product
HAVING SUM(Quantity) > 4000
"Kayaklar Uzun" ürününü belirttiğimiz önceki örneğe WHERE operatörünü ekledik ve bu da HAVING operatörüne göre gruplamayı etkiledi. Sonuç olarak "Skis Long" ürününün 4.000'den fazla satılan ürün grupları listesine giremediğini görüyoruz.
Normal veri örneklemede olduğu gibi HAVING operatörü ile gruplandırdıktan sonra grupları sıralayabiliriz. Bunun için zaten tanıdık olan ORDER BY operatörünü kullanabiliriz. Bu durumda uygulaması önceki örneklere benzer. Örnek:
Run SQLSELECT Product, SUM(Quantity) AS Product_num
FROM Sumproduct
GROUP BY Product
HAVING SUM(Quantity) > 3000
ORDER BY SUM(Quantity)
veya alan numarasını sıralamak istediğimiz sıraya göre belirtmeniz yeterlidir:
Run SQLSELECT Product, SUM(Quantity) AS Product_num
FROM Sumproduct
GROUP BY Product
HAVING SUM(Quantity) > 3000
ORDER BY 2
Özet sonuçları sıralamak için HAVING operatöründen sonra ORDER BY ile cümle yazmamız gerektiğini görüyoruz.