MySQL GROUP BY Kullanımı – Tasarım Kodlama
MySQL

MySQL GROUP BY Kullanımı

Özet: Bu yazıda, sütunların veya ifadelerin değerlerini temel alarak satırları alt gruplara ayırmak için MySQL GROUP BY‘ı nasıl kullanacağınızı öğreneceksiniz.

MySQL GROUP BY Deyimine Giriş

GROUP BY deyimi, bir satır dizisini sütun veya ifadelerin değerlerine göre bir özet satır kümesinde gruplandırır. GROUP BY deyimi her grup için bir satır döndürür. Başka bir deyişle, sonuç kümesindeki satır sayısını azaltır.

GROUP BY yan cümlesi SUM, AVG, MAX, MIN ve COUNT gibi toplu işlevlerle kullanırsınız ve bu işlevlere aggregate fonksiyon da denilmektedir. SELECT yan cümlesinde görünen toplama işlevi her grup hakkında bilgi sağlar.

GROUP BY deyimi, SELECT deyiminin isteğe bağlı bir maddesidir. Aşağıdaki GROUP GROUP yan tümcesi sözdizimini gösterir:

GROUP BY deyimi, FROM ve WHERE deyimlerinden sonra görünmelidir. GROUP BY anahtar sözcüğünün ardından, satırları gruplandırmak için ölçüt olarak kullanmak istediğiniz virgülle ayrılmış sütunların veya ifadelerin listesi bulunur.

MySQL GROUP BY örnekleri

Aşağıdaki sorguları yapmak için şekildeki tabloyu kullanacağız.

NOT: GROUP BY kullanırken, SELECT ifadesinin yanında doğrudan alan adı yazılıyorsa bu alan GROUP BY yanında da yazılması gerekir. Bu bilgiyi öğrendikten sonra hadi aşağıdaki bir dizi GROUP BY örneğine bakalım.

Örnek Sorgu 1: Öğrenci tablosundaki sınıfları gruplandırınız.

Gördüğünüz gibi, GROUP BY deyimi, durum değerlerinin benzersiz oluşumlarını döndürür. Yukarıdaki sorguda gösterildiği gibi DISTINCT işleci gibi çalışır.

GROUP BY deyimi: MySQL ve standart SQL

Standart SQL, GROUP BY deyiminde bir takma ad(ALIAS) kullanmanıza izin vermez, ancak MySQL bunu destekler. Aşağıdaki örneklerin bir kaçında takma ad kullanılmıştır. Bu sorgularda standart SQL’de geçerli değil.

MySQL ayrıca, standart SQL’de olmadığı gibi grupları artan veya azalan sırada sıralamanıza izin verir. Bu yazıdaki örneklerden bir tanesinde mevcut  ama siz diğer örneklere de uyarlayabilirsiniz.

GROUP BY deyiminde DESC‘yi, durumu azalan düzende sıralamak için kullandığımıza dikkat edin. Grupları duruma göre artan sırada sıralamak için GROUP BY deyiminde açıkça ASC’yi de belirtebiliriz.

MySQL GROUP BY Toplam (Aggregate) Fonksiyonlar ile Kullanımı

Örnek Sorgu 2: Yukarıdaki örnekte siniflara göre gruplama yaptık. Şimdi hangi sınıfta kaç öğrenci var ona bakalım.( Gruplar içinde saymak için COUNT aggregate fonksiyonu kullanılır.)

Örnek Sorgu 3: Şimdi biraz daha detaylı bir sorguya bakalım. Bu sefer iki tabloyu birleştirip bir sorgu yazalım. Her öğrencinin yapmış olduğu işlem adetini yazdıran sorguyu yapalım. Bu sorguda ogrenci ve islem tabloları aynı anda kullanılacaklar.  Ayrıca her öğrenci dediğimiz için gruplama öğrencilere(ogrno) göre olacak.

 

Örnek Sorgu 4: Benzer bir örneği bu sefer toplamlar için yapalım. Öncelikle basit bir toplam işlemi ile başlayalım. kitap tablosundaki tür numaraları aynı olan kitapların sayfa sayılarını getiren sorgu aşağıdaki gibi olacaktır. Örneğin tür numarası 2 olan tüm kitapların sayfa sayısı 10253 gibi olacak.

 

Örnek Sorgu 5:  Tür numaraları yerine tür adları olsa çok daha iyi olurdu. Bu sorguda da tür adları ile toplam sayfa sayısını getiren sorguyu yapalım.

 

Örnek Sorgu 6: Başka bir aggregate fonksiyon olan MAX yada MIN için de şöyle bir örnek düşünebiliriz. Her sınıftaki en yaşlı öğrencileri listeleyen sorguyu yapalım. (En yaşlı öğrenci aslında doğum tarihi en eski olandır. MIN kullanacağız)

 

Örnek Sorgu 7: Yine aynı örneği bu sefer doğum tarihine göre değil de yaşına göre yapacak olursak, yaşını hesaplayıp MAX kullanabiliriz. (Yaş=BUGUN YILI-DYILI şeklinde hesaplanır)

MySQL GROUP BY İfade ile Kullanımı

GROUP BY yanında diğer ifadeleri de kullana bilirsiniz.

Örnek Sorgu 8: Öğrencileri yaşlarına göre gruplayıp kaç farklı yaş olduğunu bulan sorguyu aşağıdaki gibi yazabiliriz.(Bu sorgunun geliştirilmiş hali aşağıdaki sorguda mevcuttur)

 

Örnek Sorgu 9: Öğrencileri yaşlarına göre gruplayıp her yaştan kaç tane öğrenci olduğunu öğrenmek için aşağıdaki sorguyu yazmak gerekir.

Bu İKİ örnekte, yıl verisini kullanarak doğum tarihlerini hesapladık. Bu hesaplamaya bir tane YAS adında ALIAS(takma ad) tanımlayıp, bu değere göre gruplama yaptık. Ayrıca ikinci örnekte Yaşlara göre gruplanan öğrencileri COUNT ile saydırarak, hangi yaştan kaç tane öğrenci olduğunu öğrendik. Daha önce de belirttiğim gibi SELECT yan tümcesinde görünen ifadenin GROUP BY yan tümcesinde olduğu gibi olması gerektiğini unutmayın.

MySQL GROUP BY HAVING yan Cümlesi ile Kullanımı

GROUP BY deyimiyle döndürülen grupları filtrelemek için HAVING deyimi kullanın.

Örnek Sorgu 10: Aşağıdaki sorguda 22 yaş ve altında olan öğrencilerin, her yaş grubunda kaç tane öğrenci olduğunu bulan sorgu yazılmıştır.

SQL de Having ve Where Arasındaki Fark Nedir?

Öncelikle şunu belirteyim, GROUP BY MySQL yada MSSQL her ikisinde de aynı şekilde kullanılmaktadır. Having ifadesi GROUP BY ile gruplanan ifadeleri filtrelemek için kullanılır. Yukarıdaki örnek olduğu gibi YAŞ değerine göre gruplayıp, yine aynı YAS değerinde HAVING ile filitreleme yapıldı. Aşağıdaki örnekte ise  öğrenci tablosundaki sütun değerleri üzerinde filtreleme yapılmıştır.

Öğrencileri yaşlara göre gruplayıp yaşlar üzerinden filtreleme işlemini GRUOP BY yaparken, gruplama dışında kalan alanlarda filitreleme işlemini WHERE yan cümlesi yapmaktadır. WHERE ile tüm tablo üzerinde filtreleme yapılırken, HAVING ile sadece gruplar üzerinde filtreleme yapılmaktadır.

 

Örnek Sorgu 11: Aşağıdaki sorgu her yaş grubundan MART ayında doğan kaç öğrenci olduğunu göstermektedir.

 

Örnek Sorgu 12: Having ve WHERE yan cümleleri bir arada da kullanmak mükündür. Yukarıdaki iki örneği birleştirecek olursak şöyle bir sorumuz oluşacaktır.

22 yaş ve altındaki gruplardan mart ayında dünyaya gelen öğrencilerin kaçar tane olduğunu yazdıran sorguyu aşağıdaki gibi yaparız.

Göründüğü gibi MART ayındaki öğrencileri bulmak için WHERE yan cümlesi kullanılırken, gruplanan yaşlardaki yaşı 22 altında kalan öğrencileri bulmak içinse HAVING kullanılmıştır.

 

Örnek Sorgu 12: GROUP BY yan cümlesi ile sıralama yapmak mümkündür. Aşağıdaki örnekte öğrencileri sınıflara göre gruplayıp, sınıf ismine göre azalan şekilde sıralanmıştır.

 

Bu derste, size sütunların veya ifadelerin değerlerini temel alarak satırları alt gruplarda gruplamak için MySQL GROUP BY deyimini nasıl kullanacağınızı gösterdik.

 

 

1 Yorum

Yorum bırak