GROUP BY ifadesi tabloyu veya birlikte sorgulanan tabloları gruplara bölmek için kullanılır. Genel kullanımı aşağıdaki gibidir. GROUP BY ifadesi ORDER BY gibi sonuçları sıralamak için değil gruplara göre hesaplama yapılacağı zaman kullanılır.
Aşağıdaki görseli incelediğimizde renk kategorisine göre kayıtlar gruplanmıştır.
Gruplanan bu kayıtların kaç tane olduğu(COUNT), grup içindeki fiyatların ortalama değeri(AVG) yada toplam(SUM) değeri, grupların içindeki en pahalı(MAX) en ucuz(MIN) gibi işlemleri yapabiliriz. Bu işlemleri yapmak için kullanılan COUNT, AVG, SUM, MAX, MIN gibi fonksiyonlara AGGRAGATE fonksiyonlar denilmektedir ve genellikle GROUP BY ifadesi ile kullanılır.
NOT: Gruplama yaparken select içinde yazılan alan isimleri mutlaka group by içinde geçmelidir. Gruplama yapılırken SELECT * şeklinde işlem yapamayız. Ancak SELECT COUNT(*) şeklinde hesaplama işlemlerini yapabiliriz.
SQL GROUP BY Örnekleri
GROUP BY kullanımı ile ilgili aşağıdaki sorguları inceleyebilirsiniz.
Sorguda kullanılan ogrenci, kitap ve tur tabloları aşağıdaki gibidir.
Bakınız: SQL LIKE Kullanımı ve Örnekleri
Örnek 1: Hangi isimden kaç tane olduğunu bulun.
1 2 3 4 |
SELECT ograd,count(*) from ogrenci group by ograd |
Örnek 2: Sınıflardaki öğrenci sayısını bulun.
1 2 3 4 |
SELECT sinif, count(*) from ogrenci group by sinif |
Örnek 3: Her sınıftaki erkek ve kız öğrenci sayısını bulun.
1 2 3 4 |
SELECT sinif, cinsiyet,COUNT(*) as 'sayi' FROM ogrenci GROUP BY cinsiyet, sinif |
Örnek 4: Her türden kaç tane kitap olduğunu listeleyiniz.
1 2 3 4 |
SELECT turno, COUNT(kitapno) FROM kitap GROUP BY turno |
Örnek 5: Her türdeki en fazla sayfa sayısı olan kitapları listeleyiniz.
1 2 3 4 |
SELECT turno, MAX(sayfasayisi) FROM kitap GROUP BY turno |
Örnek 6: Her türdeki en az sayfa sayısı olan kitapları listeleyiniz.
1 2 3 4 |
SELECT turno, MIN(sayfasayisi) FROM kitap GROUP BY turno |
Örnek 7: Her türdeki kitapların toplam sayfa sayılarını listeleyiniz.
1 2 3 4 |
SELECT turno, SUM(sayfasayisi) FROM kitap GROUP BY turno |
Örnek 8: Her türdeki kitapların ortalama sayfa sayılarını listeleyiniz.
1 2 3 4 |
SELECT turno, AVG(sayfasayisi) FROM kitap GROUP BY turno |
Örnek 9: Her türden kaç tane kitap olduğunu listeleyiniz.(Tür isimleri de olsun)
1 2 3 4 5 |
SELECT tur.turadi, COUNT(kitap.turno) FROM kitap, tur WHERE kitap.turno = tur.turno GROUP BY kitap.turno, tur.turadi |
Örnek 10: Her öğrencinin adını, soyadını ve okuduğu toplam sayfa sayısını büyükten küçüğe doğru listeleyiniz.
1 2 3 4 5 6 7 |
SELECT ograd,ogrsoyad,sum(sayfasayisi) as sayfa FROM ogrenci,kitap,islem WHERE ogrenci.ogrno=islem.ogrno and kitap.kitapno=islem.kitapno GROUP BY ograd,ogrsoyad,ogrenci.ogrno ORDER BY sayfa |
Örnek 11: Öğrencinin okuduğu kitap sayılarını bulun.
1 2 3 4 5 6 |
SELECT ograd,ogrsoyad,count(*) as kitapsayisi from ogrenci,kitap,islem where ogrenci.ogrno=islem.ogrno and kitap.kitapno=islem.kitapno group by ograd,ogrsoyad,ogrenci.ogrno order by kitapsayisi |
Ayrıca çok daha fazla LIKE, JOIN, ORDER BY, GROUP BY vb. örneklere ulaşmak için SQL Sorgu Örnekleri ve SQL Çalışma Soruları yazılarını inceleyebilirsiniz.