ben

OMÜ , Bilgisayar Mühendisliği, 13'

21 Ağustos 2019 Çarşamba

Kümeleme Fonksiyonları



1) AVG

Ortalama hesaplar. Örneğin çalışanların ortalama ne kadar maas aldığını hesaplatmak için;
--- select avg(maas) from  personel

Eğer çıktının biraz daha  okunur olmasını arzu edersek sorgu üzerinde ufak bir değişiklik yapabiliriz;
---select avg(maas) as ortalama from  personel
---select round(avg(ucret)/10,0) as ortalama from tbl_ucret


Eğer yalnızca Türkiye'de çalışanların maaş ortalamasını hesaplamak istersek;
---select avg(maas) as ortalama from  personel where ulke='Türkiye'

2) COUNT

Bir alandaki değerlerin kaç adet olduğunu yani sayısını hesaplar. örneğin kaç çalışan olduğunu hesaplamak istersek;
--- select count(maas)  from  personel
--- select count(*)  from  personel

Eğer  kesin olarak kayıt sayısını kullanmak istiyorsak her zaman ifadeyi count(*) olarak kullanmalıyız. Bu ifade her zaman tablodaki ya da sonuç kümesindeki kayıt sayisini getirir.

3) SUM

Sayisal değerler içeren bir kolondaki değerlerin toplamını döndurur.örneğin aylık ödenen toplam maaşı öğrenmek istersek;
--- select sum(maas) from kisiler

DİKKAT:  Aşağıdaki sorguların çıktıları aynı olmasına rağmen bir fark var, bu fark nedir, neyi etkiler?

  • select sum(ucret)/count(ucret) as toplam from tbl_ucret 
  • select avg(ucret) as toplam from tbl_ucret 


4) DISTINCT

Bazen bir tablonun bazı kolonlarında tekrarlanan değerler (veriler) olabilir.  Ancak tekrarlanan verileri eleyerek her farklı veriden yalnız bir adet bulunmasını istiyorsak DISTINCT anahtar sözcüğünü kullanırız
--- select distinct tur from tbl_hastane;


Eğer bir kolondaki farklı değerlerin sayısını öğrenmek istıyorsak count ifadesini count(kolon_adi) şeklinde kullanırız.
--- select count(distinct tur)  from tbl_hastane;



4) MAX VE MIN

Bir alandaki en büyük ve en küçük değerleri döndürür. En yaşlı ve en genç çalışanları belirlemek istersek;
--- select max(yasi)  as enyasli from  kisiler;
--- select min(yas) as engenc from kisiler;

DİKKAT: En yaşlı kişinin adını soyadını öğrenmek istersek  sorgumuz nasıl olmalı?

--- select max(yasi), ad_soyad from kisiler 

   yazarsanız yanlış yapmış olursunuz. En  büyük yaş 50 olsun max bize 50 yi getirir. fakat 50 yaşında 3 kişi varsa , yukarıdaki sorgu 50  ifadesinin yanına 3 kişiden hangisinin adını yazacağını bilemez. çunku max bir tek sonuc döndürür, ad soyadda ise 3 kişinin adi soyadı var. Bu nedenle sorguyu biraz değiştirmek gerekiyor.  bizden istenilen ifadeye tekrar bakalım en yaşlı olan kişinin adı soyadını getir demek aslında bir şart(koşul) belirtmektir. Bu nedenle yasi max yasa esit olma where koşunu yazmamız gerekiyor.

--- select ad_soyad from kisiler where yasi=max(yasi)

uppss yine hata aldık,nedenine bir bakalım. sorgunun  çaılşma mantıgı olarak ilk çalışan kısım where koşuludur.burdaki where koşulunda yasi birşeye esit olanı getirecek ama eşitliğin karşısında sabit bir değer yok hesaplanacak olan bir değer var. hesaplama işlemi bizim  üzerinde sorgu yaptıgımız alanlar. bu nedenle hata bana şunu söylemeye çalısıyor.  yaş alanını max değerle kıyaslayabilmem için senin önceden max değeri bulup gelmen gerekiyor. bu nedenle kıyaslamadan önce bir alt sorgu ile max değeri bulup where koşuluna vermemiz gerekecek.

--- select ad_soyad from kisiler where yasi=(select max(yasi) from tbl_kişiler)

o zaman burda şöyle bir kural çıkartalım. EĞER KÜMELEME FONKSİYONLARI WHERE DEN SONRA YAZACAKSAK HER ZAMAN ALTSORGU YAZMAMAMIZ GEREKİR.



SQL: Yası ortalama yasın ustunde olan hastalardan kilosu,   kilo ortalamasının ustunde olan hastaların boy toplamı

---select sum(boy) from tbl_hastaprofil 
    where yasi>(select avg(yasi) from tbl_hastaprofil) and 
                       kilo>(select avg(kilo) from tbl_hastaprofil)


SQL: En uzun boya sahip olanların yas ortalamasını getiren sql komutu

---select avg(yasi) from tbl_hastaprofil
    where boy=(select max(boy) from tbl_hastaprofil)


SQL:  Yasi, ortalama yasın altında olanların boylarının karesinin toplamı getiren sql komutu
--- select sum( power(boy,2)) from tbl_hastaprofil
    where yasi<(select avg(yasi) from tbl_hastaprofil)


SQL:  Yasi, yasi 30 un altında olanların yas ortalamasından küçük olan kac kişi var

---select count(*) from tbl_hastaprofil
      where yasi<(select avg(yasi) from tbl_hastaprofil where yasi<30)



SQL:  Kilosu  30 ile 60 arasında olan bayan veya – kangrubuna  sahip olan,  boyu  bayan hastaların boy ortalamasının üstünde olan kaç hasta var
--- select count(*) from tbl_hastaprofil
     where kilo between 30 and 60 and (cinsiyet='K' or kangrubu like '%-%')
             and boy>(select avg(boy) from tbl_hastaprofil
                            where cinsiyet='K')


Hiç yorum yok: