2012-03-23 19 views
0

Ich habe eine Tabelle namens credit_log und die Spalten sindMysql Auswahlabfrage, Spalten Spaltendaten bedingt in zwei neue Spalten

user_id | amount 

Der Betrag kann positiv oder negativ sein. Positiv bedeutet, dass Kredite gekauft wurden, Negativ bedeutet, dass Kredite ausgegeben wurden. Also, ich möchte eine Abfrage haben, die im Wesentlichen

user_id | Bought | Spent 

zurückkehrt, möchte ich positive Mengenwerte summieren, um folgendes gekauft und summieren negativen Betrag um Spent und ich möchte Gruppe von der user_id

Zur Zeit habe ich eine Abfrage wie diese

select user_id,sum(amount) from credit_log group by user_id; 

aber es summiert sowohl auf positive als auch negative Werte. Wie kann ich eine Abfrage schreiben, um sie zu trennen?

Antwort

2

Einige bedingte Anweisungen in der Abfrage sollte gut funktionieren:

SELECT 
    user_id, 
    SUM(IF(amount > 0, amount, 0)) bought, 
    SUM(IF(amount < 0, amount, 0)) spent 
FROM credit_log 
GROUP BY user_id; 
+0

Dank, es hat funktioniert. – rkt

+0

@JYelton, also hast du gepostet, während ich meins geschrieben habe. Hab nicht bemerkt, dass du gepostet hast. – kasavbere

+0

Normalerweise versucht SO, mit einem JS-Banner, das Sie wissen lässt, etwas gepostet wurde, hilfreich zu sein, aber wenn Beiträge im Abstand von Sekunden liegen, ist das normalerweise nicht genug Warnung. – JYelton

0

Ich bin nicht 100% die Syntax das gleiche in mysql ist ... aber es sieht aus wie:

select 
    user_id 
,case when amount > 0 then amount else 0 end as bought 
,case when amount < 0 then amount else 0 end as spent 
from 
credit_log 

Und Sie können sum() einfach platzieren um die Case-Anweisungen weitergehen (und die end aber nicht as).

1
select user_id, sum(if(amount>0,amount,0)) bought, sum(if(amount<0,amount,0)) spent 
from web_user_credits group by user_id; 
0

Check this:

select user_id , sum(if(amount< 0 ,0 ,amount)) as spent, 
    sum(if(amount> 0 ,0 ,amount)) as bought 
from credit_log group by user_id