AGREGATEE FONKSİYONLARDA ŞART BELİRTMEK
Read Time:1 Minute, 1 Second
AGREGATEE FONKSİYONLARDA ŞART BELİRTMEK
Agregatee fonksiyonlarda kullanılan fonksiyon içerisinde de şart belirtmemiz mümkün. Örneğin SUM() fonksiyonunu kullanacağımızı varsayalım. Eğer şöyleyse şununla topla, yok böylese bununla topla şeklinde koşul belirtebiliriz. Mesela bir işyerinin muhasebesini tutuyor olalım. Çalışanların ay içerisinde muhasebeden aldıkları parayı veritabanına işleyeceğiz. 3 farklı şekilde ay içerisinde para alma durumları olsun, bunlar sıra ile;
1-avans çekilen para
2-yaptıkları satıştan aldıkları pirim
3-bahsiş gelirleri
Şeklinde olsun, Şuan veritabanımızı inceleyecek olursak şu şekilde bir tablo ile karşılaşacağız.
id | ad | soyad | tip | miktar |
---|---|---|---|---|
1 | Osman | ÜNAL | 1 | 100 |
2 | Halil | ADEMOĞLU | 1 | 150 |
3 | Yunus | Aktaş | 2 | 250 |
4 | Halil | ADEMOĞLU | 3 | 30 |
5 | Osman | ÜNAL | 3 | 50 |
6 | Yunus | Aktaş | 1 | 300 |
7 | Halil | ADEMOĞLU | 3 | 70 |
8 | Halil | ADEMOĞLU | 2 | 250 |
9 | Osman | ÜNAL | 2 | 300 |
10 | Yunus | AKTAŞ | 1 | 100 |
Çalışanların aldıkları paraları gruplayarak hesaplamak istersek SUM() fonksiyonu ile CASE WHEN THEN kısıtlamaları kullanarak herkesin nerden ne kadar aldığını hesaplayabiliriz. Bu sefer koşul ifadesini agregatee fonksiyonun içerisine yazacağız.
select ad,soyad
,SUM(case when tip=’1′ then miktar else 0 end) as Avans
,SUM(case when tip=’2′ then miktar else 0 end) as Prim
,SUM(case when tip=’3′ then miktar else 0 end) as Bahsis
from tbCalisanlar group by ad,soyad
Yukarıdaki örnekten herhangi bir SUM() işlemini inceleyecek olursak, eğer tipi şöyle ise miktar kolonuyla topla, eğer tip şarta uymuyorsa burayı 0 olarak al, ve her SUM() koonuna da alias ile isim belirterek hangi kolonun neyi ifade ettiğini belirtmiş olduk. Bu sorgunun sonucunda gelen tablo ise şu şekilde olacaktır.
ad | soyad | Avans | Prim | Bahsis |
---|---|---|---|---|
Halil | ADEMOĞLU | 150 | 250 | 100 |
Yunus | Aktaş | 400 | 250 | 0 |
Osman | ÜNAL | 100 | 300 | 50 |
http://www.farukunal.net‘den alıntıdır.