Merhaba arkadaşlar bu yazımda sizlere Verilerde Gruplama (GROUP BY) ve HAVING kullanımından bahsedeceğim. GROUP BY ve HAVING’i genel olarak belirli istatistikler çıkartmak için kullanabiliriz.

Bu yazımda öncelikle GROUP BY’dan ve daha sonra ise HAVING’den bahsedeceğim. GROUP BY ve HAVING’i anlatırken kullanacağım örnek tablonun içeriği aşağıdaki gibidir

calisanlar isimli örnek tablo

Bu tablomuzda mesleklerin şehirlere göre aldığı maaşları ele aldındığını görebilirsiniz.

GROUP BY

GROUP BY işlemi verilerde gruplama yapmamızı sağlar. Nasıl yani diye sorarsanız şöyle açıklamam gerekir. Yukarıdaki örnek tablomuzda 3 farklı mesleğin 3 farklı şehirde aldığı maaşları görmekteyiz. Aynı meslek farklı şehirlerde farklı maaşlar alabiliyor. Biz ise GROUP BY’ı kullanarak bu 3 şehirde her mesleğin aldığı minimum ve maksimum maaş miktarlarını istiyoruz. O zaman şöyle bir sorgu yazmamız gerekicektir.

SELECT meslek, MIN(MAAS) as Minimum, MAX(MAAS) as Maksimum FROM calisanlar GROUP BY meslek;

şeklindeki sorgumuzu çalıştırdığımız zaman karşımıza şu şekilde bir sanal tablo çıkacaktır.

Bu tabloyu şöyle yorumlayabiliriz. Aşçılar bu 3 şehirde en az 3500 TL, en fazla 5500 TL maaş alıyor. Elektrikçiler en az 1500 en fazla 4000 TL maaş alıyor ve Freelancer ise en az 2900 TL en fazla 5000 TL maaş almaktadır. Buradaki değerleri tamamen ben sallamış olsam da gerçek bir veri olsaydı bu sorgu ile bu kadar veri karşımıza çıkacaktı.

Bu sorgudaki MIN(MAAS) as Minimum ve MAX(MAAS) as Maksimum kısmını ileri ki yazılarımda detaylı bir şekilde anlatıcak olsam bile şöyle kısaca açıklayabilirim.

“MIN(MAAS)” maas sütunundaki en düşük değeri verir “MAX(MAAS)” ise maas sütunundaki en yüksek değeri. Buradaki “as Minimum” ve “as Maksimum” kısımları ise karşımıza çıkacak sanal tabloda ki en az ve en fazla maaş değerlerini gösterecek sütunların isimlerini belirtmek için vardır.

Şimdi ben diyorum ki minimum maaşı 2000 tl üstünde olanları gösterelim sadece bunu WHERE ile yapabiliriz değil mi deneyim o zaman sorgumuza şöyle bir güncelleme getirelim.

SELECT meslek, MIN(MAAS) as Minimum, MAX(MAAS) as Maksimum FROM calisanlar WHERE Minimum > 2000 GROUP BY meslek;

Baktığımız zaman Minimum sütunundaki değerlerin 2000 den büyük olanları seçmemizi istiyor doğru gibi duruyor. Bu sorguyu çalıştırırsak karşımıza şöyle bir sonuç çıkar.

Bu hatada Minimum adında bir sütun olmadığını bizlere söylüyor aslında haklı gerçekten de yok işte bu tarz bir işlem yapmak istersek HAVING’i kullanıyoruz.

HAVING

HAVING, aslında WHERE ile neredeyse aynı işlemleri yapıyor ama sadece GROUP BY kullanıldıktan sonra kullanılabiliniyor. Şimdi minimum maaşı 2000 den fazla olanları göstermek için WHERE “Minimum > 2000” kısmını silip sorgumuzu şu hale getirelim.

SELECT meslek, MIN(MAAS) as Minimum, MAX(MAAS) as Maksimum FROM calisanlar GROUP BY meslek HAVING Minimum > 2000;

Gördüğünüz gibi WHERE ile aynı maktıkta çalıştı ama sadece Veri Gruplama(Kümeleme) işlemi yapılırken kullanılıyor.

Özet,

Bu yazımda sizlere Veri Gruplama(Kümeleme) yani GROUP BY ve HAVING kullanımından bahsettim. GROUP BY’ın gruplama işlemini yaparken HAVING ise bir yardımcı eleman olarak WHERE yapacağı işlemi burada yapmasını sağladığından bahsettim.

Bir sonraki yazımda Verilerde Arama işlemlerinden yani LIKE ve IN kullanımından bahsedeceğim. O zamana kadar MySQL hakkında yazmış olduğum diğer yazıları merak ediyorsanız buraya tıklayabilirsiniz.