SQL Group By ile Gruplandırma
Merhaba arkadaşlar , bildiğiniz gibi Çoklu satır fonksiyonları bir sütundaki verileri, bir işleme sokarak tek bir değer döndürür. Siz eğer tek değer döndürmesini istemiyorsanız, yani her grup için ayrı ayrı hesap yapmasını istiyorsanız Group By ile işlem yapabilirsiniz.
Çok uzatmadan, aşağıdaki tablo üzerinde Group By fonksiyonu ile birkaç gruplandırma yapalım.
Film_No | Ad | Tarih | IMDB_Puan |
1 | The Shawshank Redemption | 1994 | 9,2 |
2 | The Dark Knight | 2008 | 8,8 |
3 | Fight Club | 1999 | 8,8 |
4 | Forrest Gump | 1994 | 8,6 |
5 | Leon | 1994 | 8,6 |
6 | V For Vandetta | 2006 | 8,1 |
7 | A Beautiful Mind | 2006 | 8,0 |
8 | Eternal Sunshine of the Spotless Mind | 2004 | 8,4 |
9 | Inception | 2010 | 8,8 |
10 | Good Will Hunting | 1997 | 8,1 |
Seneye göre, her sene kaç film çıktığını gösterelim. Yani tarihe göre gruplandırma yapalım.
SELECT Tarih, COUNT(*) AS Film_Adet FROM Filmler GROUP BY Tarih
Bu şekilde tarihe göre gruplandırma yapabilirsiniz.
Group By fonksiyonunu kullanırken, SELECT ile seçtiğiniz sütun ismini Group By deyiminin yanına yazmalısınız. Aksi halde sorgu çalışmayacaktır. Mesela aşağıdaki gibi bir sorgu yanlıştır ;
SELECT Tarih, SUM(IMDB_Puan) FROM Filmler
SELECT sorgusu Tarih sütunu için 10 farklı değer döndürürken, SUM fonksiyonu için sadece bir değer döndürür. Dolayısıyla istediğiniz sonuca ulaşamazsınız.
Tarihe göre, o tarihte çıkmış filmlerin ortalama puanlarını elde eden bir sorgu yapalım ;
SELECT Tarih, AVG(IMDB_Puan) FROM Filmler GROUP BY Tarih
IMDB Puanlarına göre, o IMDB puanını alan kaç adet film olduğunu bulan bir sorgu yazalım ;
SELECT IMDB_Puan, COUNT(IMDB_Puan) AS Adet FROM Filmler GROUP BY IMDB_Puan
HAVING ile Gruplamaya Kriter Belirleme
Group By fonksiyonunu bir kriter ile beraber kullanmak isterseniz WHERE yerine, HAVING kullanmanız gerekiyor. Gruplandırma koşullarını HAVING ile yapmalısınız.
2000′den sonraki her bir tarih için ortalama IMDB_Puanlarına bir bakalım ;
SELECT Tarih, AVG(IMDB_Puan) FROM Filmler GROUP BY Filmler HAVING Tarih > 2000
Sonuç
Group By fonksiyonu, gruplandırma yapmak için kullanılır. Genellikle de bir aggregate fonksiyon ile beraber kullanılır.
Eğer gruplandırmaya bir koşul belirlemek istiyorsanız HAVING komutunu kullanmalısınız. Normalde WHERE olan kriter belirleme komutu, gruplandırma söz konusu ise HAVING olmaktadır.