28 Haziran 2015 Pazar

Temel SQL Dersi 14: Kümeleme Fonksiyonları



Kümeleme Fonksiyonları

Kümeleme fonksiyonları tablodaki bir kolon (alan) üzerindeki değerler için belli matematiksel hesaplamalar yapar ve sonuç döndürürler. Örneğin AVG (average-ortalama) fonksiyonu bir kolondaki tüm değerlerin ortalamasını hesaplamamıza yardımcı olur. Makale boyunca örnek sorgular aşağıdaki kisiler tablosu üzerinde işletilecektir. Tabloya söyle bir göz atıp devam edelim.

idAdSoyadYasCinsiyetŞehirÜlkeMaaş
2AhmetYılmaz201AnkaraTürkiye2000
3MehmetEfe221BoluTürkiye2000
4AyşeCan230İstanbulTürkiye3500
5FatmaAk350AnkaraTürkiye3200
6JohnSmith451New YorkUSA3500
7EllenSmith400New YorkUSA3500
8HansMüller301BerlinAlmanya4000
9FrankCesanne351ParisFransa3700
10AbbasDemir261AdanaTürkiye2000
11HaticeTopçu260HatayTürkiye2200
12GülsümDemir350AdanaTürkiye2000

AVG ( ) Fonksiyonu
Ortalama hesaplar. Örneğin çalışanların ortalama ne kadar maaş aldığını hesaplamak istersek:
SELECT AVG(maaş) FROM kisiler
Sorgunun çıktısı aşağıdaki gibi olacaktır:
AVG(maaş)
2872.7273
Eğer çıktının biraz daha okunur olmasını arzu edersek sorgu üzerinde ufak bir değişiklik yapabiliriz:
 SELECT AVG(maaş) AS OrtalamaMaaş FROM kisiler
Sorgunun çıktısı aşağıdaki gibi olacaktır:
OrtalamaMaaş
2872.7273
Eğer yalnızca Türkiye’de çalışanların maaş ortalamasını hesaplamak istersek:
 SELECT AVG(maaş) AS OrtalamaMaaş FROM kisiler WHERE ülke='Türkiye'
Sorgunun çıktısı aşağıdaki gibi olacaktır:
OrtalamaMaaş
2414.2857

COUNT ( ) Fonksiyonu
Bir alandaki değerlerin kaç adet olduğunu yani sayısını hesaplar. Örneğin kaç çalışanın olduğunu hesaplamak istersek:
 SELECT COUNT(maaş) AS Sayı FROM kisiler
Sorgunun çıktısı aşağıdaki gibi olacaktır:
Sayı
11
Sorguyu aşağıdaki gibi değiştirsek de sonuç değişmez:
 SELECT COUNT(id) AS Sayı FROM kisiler
Çünkü COUNT fonksiyonu alandaki değerlerin ne olduğu ile ilgilenmez, sadece kaç adet değer olduğu ile ilgilenir. Eğer boş (NULL) değerler var ise bunlar hesaba katılmaz. Yani yukarıdaki tabloda eğer bir çalışanın maaş bilgisi boş olsaydı, COUNT(maaş) sorgusu 10 sonucunu verirken COUNT(id) sorgusu 11 sonucunu verecekti.

COUNT(*) Kullanımı
Eğer kesin olarak kayıt sayısını istiyorsak her zaman ifadeyi COUNT(*) şeklinde kullanmalıyız. Bu ifade her zaman tablodaki ya da sonuç kümesindeki kayıt sayısını (satır sayısını) döndürür.
 SELECT COUNT(*) AS Sayı FROM kisiler
Sorgu kisiler tablosunda kaç kayıt olduğunu hesaplar:
Sayı
11
Eğer Amerika’da çalışanların sayısını hesaplamak istersek:
 SELECT COUNT(*) AS Sayı FROM kisiler WHERE ülke='USA'
Sorgunun çıktısı aşağıdaki gibi olacaktır:
Sayı
2

COUNT (DISTINCT kolon_adı) Kullanımı
Eğer bir kolondaki farklı değerlerin sayısını öğrenmek istiyorsak COUNT ifadesini COUNT (DISTINCT kolon_adı) şeklinde kullanırız. Örneğin kaç farklı ülkeden çalışan olduğunu hesaplamak istersek:
 SELECT COUNT(DISTINCT ülke) AS ÜlkeSayısı FROM kisiler
Tabloda ülke alanında 4 farklı değer (Türkiye, USA, Fransa, Almanya) olduğundan çıktı aşağıdaki gibi olacaktır.
ÜlkeSayısı
4

FIRST ( ) Fonksiyonu
Bir alandaki ilk değeri döndürür. Örneğin tablodaki ilk ismi öğrenmek istiyorsak.
 SELECT FIRST(Ad) AS ilkİsim FROM kisiler
Çıktı aşağıdaki gibi olacaktır:
ilkİsim
Ahmet
Ancak bu MySQL First fonksiyonunu desteklemez. Aynı işi yapan sorgu MySQL’de aşağıdaki gibidir.
 SELECT ad AS ilkİsim FROM kisiler LIMIT 1

LAST ( ) Fonksiyonu
Tahmin edebileceğiniz gibi en sondaki değeri döndürür. Ve yine tahmin edebileceğiniz gibi MySQL tarafından desteklenmez. Tablodaki son soyisim değerini döndüren sorgunun standart SQL ve MySQL versiyonları aşağıdaki gibidir:
SELECT LAST(Soyad) AS SonSoyad FROM kisiler
 
SELECT soyad AS SonSoyad FROM kisiler ORDER BY id DESC LIMIT 1
Her iki sorgunun çıktısı aşağıdaki gibidir.
SonSoyad
Demir

MAX ( ) ve MIN ( ) Fonksiyonları
Bir alandaki en büyük ve en küçük değerleri döndürürler. En yaşlı ve en genç çalışanları belirlemek istersek:
 SELECT MAX(yas) AS EnYaşlı FROM kisiler
Çıktı aşağıdaki gibi olacaktır:
EnYaşlı
45

 SELECT MIN(yas) AS EnGenç FROM kisiler
Çıktı aşağıdaki gibi olacaktır:
EnGenç
20
--Eğer en yaşlı çalışanı ismi ile birlikte sorgulamak isteseydik aşağıdaki gibi bir sorgunun işimizi görebileğini düşünebilirsiniz. Ancak bu sorgu hatalıdır.
 SELECT ad, MAX(yas) AS EnYaşlı FROM kisiler
Sorgu ad alanına tablodaki ilk ismi getirirken MAX(yas) alanına maksimum yaşı getirir:
adEnYaşlı
Ahmet45
Ancak Ahmet isimli çalışanın yaşı 45 değildir. Fonksiyonun sadece maksimum değer ile ilgilendiğini unutmayalım. En yaşlı çalışanı ismi ile birlikte bulabilmek için iç-içe (iki seviyeli) sorgu yazmamız gerekiyor ki bu da ileriki bir makalenin konusu olacak inş.

SUM ( ) Fonksiyonu
Sayısal değerler içeren bir kolondaki değerlerin toplamını döndürür. Örneğin aylık ödenen toplam maaşı öğrenmek istersek:
 SELECT SUM(maaş) AS ToplamMaaş FROM kisiler
Çıktı aşağıdaki gibidir:
ToplamMaaş
31600

Hiç yorum yok:

Yorum Gönder