Kayıt Ol

Giriş

Şifremi Kaybettim

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

soru ekleme

Soru sormak için giriş yapmalısınız.

Giriş

Kayıt Ol

.........

SQL’de Group By ve Having Kullanımı

SQL’de Group By ve Having Kullanımı

 

Group By Kullanımı

Group By adından da anlaşılacağı gibi gruplama yapmak için kullanılan bir fonksiyondur.Birden çok aynı olan kaydı bir defa listelemek için kullanılır. Genellikle bir aggregate fonksiyonu  ile beraber kullanıldığında daha anlamlı hale gelebilir.
Çok uzatmadan Group By ın aggregate fonksiyonu ile kullanımına bakalım
SELECT adi1, fonksiyon(adi2) FROM tablo GROUP BY (adi1)
AdventureWorks2008R2 veritabanında bulunan Sales.SalesOrderDetail tablosunda  SalesOrderID sütununa göre bir gruplama yapalım.Aggregate fonksiyonlarından Count() fonksiyonu ile Id si aynı olan satırların sayısını listeleyelim.
Sorgumuz bu şekilde

Çıktısı da bu şekilde.
Ekran Alıntısı
Yukarıdaki örnek de 1 sütuna göre gruplama yapıldı.Peki 2 li gruplama yapmak istersek sorgumuzu nasıl yazmamız gerekecek.

Çıktı bu şekildedir.Bu sorguda  posta kodu ve şehirlere göre bir gruplama yaptık.
Ekran Alıntısı
Sorguyu aşağıdaki gibi yazarsak,

Aşağıdaki mesaj ile karşılaşırız.2’li gruplama yapmak için PostalCode alanınıda Group By’dan sonra eklememiz gerekir.

Msg 8120, Level 16, State 1, Line 2
Column ‘Person.Address.PostalCode’ is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

  Group By’ın Mantıksal İşleyiş Tablosu

Ekran Alıntısı

Mantıksal işleyiş sıralaması from,where,groupby,having,select,order by şeklindedir.
Group By İle İş Akışı
Ekran Alıntısı
Yukarıdaki tabloda Group by’ın iş akış şeması gösterilmiştir.Önce select ve from dan oluşan sorgu çalıştırılmış  ve 5 satırlı bir tablo oluşmıştur.Bu tabloya where ile bir filtreleme yapıldığında sağ üstteki tablo oluşur.Satır sayımız giderek azalıyor.Ve şimdi de group by ile gruplama yapılıyor.Görüldüğü gibi satır sayısı 3 e düştü.
Having Kullanımı
Having komutu Group by komutundan hemen sonra kullanılır.Gruplanmış olan kayıtlardan, hangilerini isteyip hangilerini istemeyeceğimizi belirler
Yani filtreleme görevi görür.Having komutu ile Where  görev bakımından aynı işlevi görür. Farkları having  komutu  tablodaki gruplanmış verileri filtrelememize yararken where komutu gruplama olmadan önce filtreleme yapar.
Kullanım şekli aşağıdaki gibidir.

  Having Mantıksal İşleyiş Tablosu
Ekran Alıntısı
Yukarıdaki tabloda mantıksal işeyiş sıralaması gösterilmiştir.Where Group by dan önce having ise sonra çalışır.
Aşağıdaki örnekte HAVING COUNT(*) >= 10; komutu yerine  SAYI>=10 kullanımı hatalı olur.Çünkü mantıksal işleyiş tablosunda
görüldüğü gibi having komutu select den önce çalışır ve ondan dolayı selectin atadığı ismi göremez.

 

Hakkında Zeynep ŞİT

Namık Kemal Üniversitesi

Leave a reply

*