SQL VE TSQL DERS 19: HAVING VE GROUP BY KULLANIMI

Adsız

Group by, kayıtları bir alana göre gruplandırmak için kullanılır.

Group by ile gruplandırma yapıldıktan sonra kısıtlama yapılması gerekiyorsa

where kullanılamaz onun  yerine kısıtlama için having kullanılır.

Having kullanılabilmesi için ayrıca Sum, Count, Min, Max, Avg fonksiyonlarında

en az biri kullanılmalıdır.

-- Uyeleri ve uyelerin teslim aldığı kitap sayılarını veren kodu yazalım

select uyeAdSoyad,COUNT(kitapAd) 'Alınan Kitap Sayısı'  from uye,kitap,teslimat where
uyeNo=uyeId and kitapNo=kitapId

-- Bu kodu çalıştırdığımızda group by hatası alırız. Sebebi Sum,Count,Avg vs. gibi
-- fonksiyonları da kullanmak istediğimizde gruplandırma yapmamızı istemesidir.

select uyeAdSoyad,COUNT(kitapAd) 'Alınan Kitap Sayısı'  from uye,kitap,teslimat where
uyeNo=uyeId and kitapNo=kitapId group by uyeAdSoyad

-- Sonuna uyeAdSoyad 'a göre gruplandırmak istediğimizi belirtirsek hatadan kurtulmuş oluruz.


-- Şimdide yazarları ve kitaplarının toplam sayfa sayılarını listeleyelim ama sadece 3 kitabı
-- olan yazarlarda yapalım bu işlemi

select yazarAdSoyad,SUM(kitapSayfa) as 'Toplam Sayfa' from yazar,kitap
where yazarNo=yazarId group by yazarAdSoyad having COUNT(kitapId)=3

/*
yazar bilgisi toplam kitap sayfası tamam kullanılan tabloları yazdık whereden sonra
tablolar arası ilişkiyi kurduk Sum kullandığımızdan dolayı group by ile yazarAdSoyada
göre gruplandırma yaptık en sonda group bydan sonra kısıtlama yapmak istediğimizden
dolayı having kullandık Countla saydırıp 3 tane kitabı olanları listelemiş olduk
*/