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:
Yorum Gönder