SQL 4 : Group By ile Gruplandırma

Group By fonksiyonu SQL‘de gruplandırma yapmak için kullanılır. Genellikle bir “Çoklu Satır Fonksiyonu (Aggregate Function)” ile beraber kullanılır.

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 Tarih
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.

Benzer Yazılar

Yorumlar

Yorum Yazın

Su elementleri kullanabilirsiniz : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Arama
RSS
Beni yukari isinla