SQL Gelir Gider Hesabı Sorgusu
Soru :
Sadeleştirilmiş şekli aşağıdakine benzer bir tablom var.
Tip | Tutar | Grup |
1 | 100 | 1 |
1 | 200 | 2 |
0 | 23 | 1 |
1 | 16 | 1 |
0 | 110 | 2 |
Tip 1 ise gelir
Tip 0 ise gider
Gruplara göre tek seferde gelir toplamı, gider toplamı ve bakiyeyi SQL ile
nasıl alabilirim ?
yani
Grup | Gelir | Gider | Bakiye |
1 | 116 | 23 | 93 |
2 | 200 | 110 | 90 |
gibi sonuç döndüren bir sorgu lazım. Nasıl yapılır?
Cevap1 :
SELECT Grup AS grp, (SELECT COALESCE(SUM(Tutar),0) FROM TABLOM WHERE Tip=1 AND Grup=grp) AS Gelir, (SELECT COALESCE(SUM(Tutar),0) FROM TABLOM WHERE Tip=0 AND Grup=grp) AS Gider, ((SELECT COALESCE(SUM(Tutar),0) FROM TABLOM WHERE Tip=1 AND Grup=grp)- (SELECT COALESCE(SUM(Tutar),0) FROM TABLOM WHERE Tip=0 AND Grup=grp)) AS Bakiye FROM TABLOM GROUP BY Grup
Cevap2 :
SELECT t1.grup, IFNULL(t2.gelir, 0) AS gelir, IFNULL(t3.gider, 0) AS gider, IFNULL(t2.gelir, 0) - IFNULL(t3.gider, 0) AS bakiye FROM (SELECT DISTINCT grup FROM TABLOM) t1 LEFT OUTER JOIN (SELECT SUM(tutar) AS gelir, grup FROM TABLOM WHERE tip = 1 GROUP BY grup) t2 ON t1.grup = t2.grup LEFT OUTER JOIN (SELECT SUM(tutar) AS gider, grup FROM TABLOM WHERE tip = 0 GROUP BY grup) t3 ON t1.grup = t3.grup