Yazılım Eğitim

Yeni Haberler

SQL Server Verileri Gruplayarak Analiz İşlemleri | Sql Group By

 

SQL Server Verileri  Gruplayarak Analiz İşlemleri | Sql Group By

Herkeze iyi günler arkadaşlar

Bu makalemiz de sizlere Tsql ile Grup Fonksiyonlarını göstereceğim. 

   Şimdi geçelim konumuza;

      Kayıtların filtrelenmesinde kullanılan karşılaştırma operatörleri tanıtılarak her biri için açıklayıcı örnekler verdik.

     Verilerin istatistiksel analiz için nasıl gruplanacağı ve gruplanmış veriler üzerinde bazı hesaplama (gruplama) fonksiyonlarının nasıl işletileceği konuları göstereceğiz. 

      Gruplama fonksiyonlarının kullanım kuralları işlenirken her bir fonksiyonun parametre olarak alabileceği veri türüne değineceğiz. 

      Sum, Avg : Sadece sayısal veriler için çalışabilir.

      Max, Min  : Metinsel ve tarihsel veriler için çalışabilir.

      Count()    :  Fonksiyonu ise tüm veri türleriyle çalışabilir. 

  Count() fonksiyonunun diğer gruplama fonksiyonlarından farklı olduğu diğer bir konu ise parametre olarak “*” (yıldız) karakterini de alabilmesidir. 

    Gruplama fonksiyonlarının sütun adını parametre olarak kullandığı durumda “Distinct” ve “All” deyimlerinden biri sütun adından önce tercihen kullanılabilmektedir. 

   Varsayılan olarak “All” deyimi kabul edilmektedir. 

   Yani herhangi bir deyim kullanılmadığında tüm değerler hesaplamaya katılmaktadır. 

     Distinct kullanıldığında ise aynı olan değerler sadece bir kere hesaplamaya katılmaktadır. “Select” cümlesi içinde koşul belirtilirken, yani satırlar filtrelenirken, where operatöründen faydalanılır. 

     Ancak koşul ifadesi içinde gruplama fonksiyonundan dönen değer kullanılacaksa, bu koşul ifadesinin having anahtar sözcüğünden sonra kullanılması gerekmektedir. 

  “Select” cümlesi kurulurken yazım kurallarından bahsedilecek ve anahtar deyimlerin hangi sırayla cümle içinde yer alması gerektiği kurallarına değinilecektir. 

     Veriler gruplanmadan da gruplama fonksiyonlarının kullanılabilmektedir.

  Verilerin birden fazla alana göre nasıl gruplanacağı ve gruplu verilerin nasıl görüntülenebileceğine de değinildikten sonra son olarak gruplama fonksiyonlarından dönen değerler üzerinden nasıl koşul tanımlanacağı detaylı olarak incelenecektir. 

VERİLERİ GRUPLAYARAK ANALİZ ETMEK

 Veriler belirli özelliklerine göre istatistiksel olarak analiz edilebilmesi için kendi aralarında guruplanarak listelenebilmektedir. 
   
    Gruplama ile genellikle grup toplamı, grup ortalaması, grup maksimumu, grup minimumu ve grup sayısı gibi değerlere ulaşılmak istenmektedir. 
    
    Verilerin gruplanmasında yani verilerin bir veya birden fazla tablodan gruplanarak sorgulanması için yazılan “Select” cümlesi içinde “Group By” deyimi kullanılmaktadır. 
 
   “Group By” deyiminin “Select” yapısı içindeki tam konumu “Where” operatöründen sonra ve “Order By” operatöründen öncedir. 

     Yani veriler gruplanmadan önce filtrelenecekse “Where” deyimi “Group by” deyiminden önce kullanılmalıdır. 
  
     Aynı şekilde gruplanan veriler sıralanarak listelenmek istenirse de sıralama ifadesi olan “Order By”, “Select” cümlesinin sonunda gelmelidir. 

    İçinde gruplamanın bulunduğu sorgu yapılarında sıklıkla yapılan hatalardan biri gruplama işlemine tabi tutulmayan alanların da görüntülenmek istenmesidir. 
 
     Yani eğer gruplama operatörü kullanılmışsa sadece gruplanan alanlar ve gruplama fonksiyonlarından (Gruplama fonksiyonları bir sonraki konu başlığında işlenecektir.) dönen değerler görüntülenebilmektedir. 

    Not: Gruplanan alanlardaki veriler ise ilgili tablolardan benzersiz (eşsiz) olarak çekilmektedir.

    Not: "Group By" ve "Order By" ifadelerinin birlikte kullanımları durumunda "Order      By" ile birlikte kullanılan bütün sütun isimlerinin "Group By" ile gruplandırılmasının zorunluluğudur. 
   Yani gruplama işlemi varsa görüntülenen ve sıralamaya sokulan bütün alanların gruplamaya alınması gerekmektedir.

Not: ( Max,Min,Avg,Sum,Count ) Fonksiyolarını kullanırken veriler gruplanmadığın da yani “Group By” ifadesi kullanılmadığında tüm veriler tek bir grup içinde kabul edilir. 

    Dolayısıyla gruplanmayan veriler üzerinde de grup fonksiyonları kullanılabilir. 

     Ancak gruplama fonksiyonları kullanılırken fonksiyon harici bir sütun değeri görüntülenmek istenirse bu sütuna göre verilerin gruplanması gerekmektedir. Aksi takdirde hata alınacaktır.

Not: Gruplama fonksiyonları, parametre olarak aldıkları sütundaki "null" olmayan değerler üzerinden işlem yapmaktadır. Yani "Null" değerleri görmezden gelir.

Şimdi ise hadi  Grup Fonksiyonlarını görelim:

Max: 

Desteklediği Veri Tipleri : Sayısal, Metin, Tarih
Açıklaması :Uygulandığı kolonun en büyük değerini verir.

Mın:

Desteklediği Veri Tipleri : Sayısal, Metin, Tarih
Açıklaması : Uygulandığı kolonun en küçük değerini verir

Count:

Desteklediği Veri Tipleri : Bütün veri tipleri
Açıklaması : Koşula uyan kayıtların sayısını

AVG:

Desteklediği Veri Tipleri Sayısal
Açıklaması : Kolonun değerlerinin ortalamasını verir.

SUM:

Desteklediği Veri Tipleri : Sayısal
Açıklaması : Kolonun değerlerinin toplamını verir.

Şimdi ise örnekler ile bu fonksiyonları açıklayalım.





Eğer Burada biz başka bir kolon listelemek istersek "Group By" koymadığımız için bize şöyle bir ahta verecektir.

Hata:Msg 8120, Level 16, State 1, Line 4

Column 'Kitapverileri.urun_adi' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.


Şimdi ise diğer örneklerimizi kontrol edelim:



BİRDEN FAZLA SÜTUNA GÖRE GRUPLAMA

   Birden fazla sütuna göre gruplarken “Group By” operatöründen sonra ilgili sütun adları yazılmaktadır. 
    
     Yeri gelmişken daha önce öğrendiğimiz bir kuralı hatırlatmak istiyorum.
 
  Gruplama yapılırken “Select” ifadesi ile görüntülenen bütün sütun adları, “Group By” deyimi ile birlikte yazılmalıdır demiştik. 

    Yani görüntülenen ve/veya sıralamada kullanılan sütun adları gruplamada kullanılmış olmalıdır. 

     Aksi takdirde hata mesajı alınacaktır.



GRUP KOŞULLARININ KULLANIMI

               Gruplama fonksiyonlarından dönen değerler üzerinden bir filtre tanımlanmak istendiğinde “Having” operatöründen faydalanılmaktadır. 
    
     “Having” operatörünün “Select” cümlesindeki yeri, “Group By” operatöründen sonra ve “Order By” operatöründen ise öncedir. 

     “Group By” operatörünün en genel kullanım şekli aşağıdaki gibidir: 

 Operatörlerin sorguda yazılış sırasının değiştirilmesi sorgunun çalışmamasına sebep olacaktır. 

     “Select … From …” ifadesi ile getirilen kayıtlar için, “Where …” ifadesi ile şart tanımlanabildiğini görmüştük.

  “Group By … ” ifadesi ile gruplamaya tabi tutulan kayıtlar için gruplama fonksiyonları ile ilgili koşullar da “Having …” ifadesi ile tanımlanmaktadır. 

Listelenecek kayıtlar ve kolonlar belirlendikten sonra istenirse kayıtlar üzerinde sıralama yapılabilmektedir. Dolayısıyla “Order By …” ifadesi sorgu yazımında en son gelmektedir.



“Having” operatörünün kullanımıyla ilgili dikkat edilecek hususlardan biri de “Where” operatörüyle tanımlanan kısıtlar “Having” operatörü içinde de yer alabilirken “Having” operatörü içinde tanımlanması gereken kısıtların “Where” operatörü ile kullanılmasının hataya sebep olmasıdır. 

       Gruplama fonksiyonları sonucu dönen değerler ile ilgili kısıtlar sadece “Having” operatörü ile tanımlanabilmektedir. 

      Diğer bir deyişle “Where” operatörüyle fiziksel veriler üzerinde filtre tanımlanabilirken “Having” operatörü, gruplama fonksiyonları ile hesaplanan sanal veriler üzerinde filtre tanımlanmasında kullanılmaktadır. 

     Şimdi de “Avg” fonksiyonundan dönen değerler ile filtre uygulamasına bir örnek verelim. Daha önce “Sınav_Id” bilgisi 5 olan sınavdan alınan notların ortalamasını alan SQL kod örneğini yazmıştık ve hesaplanan değerin 52 olduğunu görmüştük. Şimdi de sınav not ortalaması 52’den büyük olan sınavların ortalamalarını görüntüleyelim.



Hiç yorum yok