Mysql Kümeleme Fonksiyonları
Kaynak:http://www.hrzafer.com/sql-14-kumeleme-fonksiyonlari
Programlama dillerinde olduğu gibi SQL’de de bir çok yerleşik
(built-in) fonksiyon mevcuttur. Bunlar temel olarak kümeleme (aggregate)
fonksiyonları ve skalar (scalar – iyi bir önerisi olan?) fonksiyonlar
diye ikiye ayrılır. Bu yazıda en çok kullanılan kümeleme fonksiyonlarını
ele alacağız. Yine sık kullanılan skalar fonksiyonlar ise bir başka
makalenin konusu olacak.
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.
Not: Bu arada diğer SQL derslerine buradan ulaşabilirsiniz
id |
Ad |
Soyad |
Yas |
Cinsiyet |
Şehir |
Ülke |
Maaş |
2 |
Ahmet |
Yılmaz |
20 |
1 |
Ankara |
Türkiye |
2000 |
3 |
Mehmet |
Efe |
22 |
1 |
Bolu |
Türkiye |
2000 |
4 |
Ayşe |
Can |
23 |
0 |
İstanbul |
Türkiye |
3500 |
5 |
Fatma |
Ak |
35 |
0 |
Ankara |
Türkiye |
3200 |
6 |
John |
Smith |
45 |
1 |
New York |
USA |
3500 |
7 |
Ellen |
Smith |
40 |
0 |
New York |
USA |
3500 |
8 |
Hans |
Müller |
30 |
1 |
Berlin |
Almanya |
4000 |
9 |
Frank |
Cesanne |
35 |
1 |
Paris |
Fransa |
3700 |
10 |
Abbas |
Demir |
26 |
1 |
Adana |
Türkiye |
2000 |
11 |
Hatice |
Topçu |
26 |
0 |
Hatay |
Türkiye |
2200 |
12 |
Gülsüm |
Demir |
35 |
0 |
Adana |
Türkiye |
2000 |
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:
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:
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:
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:
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:
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:
COUNT (DISTINCT kolon_adı) Kullanımı
DISTINCT ifadesini
bu makalede anlatmıştım. Eğer bilmiyorsanız önce o kısa makaleyi okumanızı öneririm.
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.
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:
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
|
Bu arada Limit konusu
bu makalede anlatıldı. Bilmiyorsanız bir göz atmanızda fayda var.
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.
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:
SELECT MIN(yas) AS EnGenç FROM kisiler
|
Çıktı aşağıdaki gibi olacaktır:
Dikkat: 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:
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:
Son olarak kümeleme fonksiyonlarının GROUP BY ifadesi ile birlikte
sıkça kullanıldığını hatırlatalım. Bunun yanında iç-içe sorgularda da
sıkça kümeleme fonksiyonu kullanılır. Sonraki makalelerde her iki konuyu
da örneklerle inceleyeceğiz.
Herkese Kolay Gelsin
Hiç yorum yok :
Yorum Gönder