Get Adobe Flash player

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

Leave a Reply