2012-03-23 59 views
0

我有一个表称为credit_log和列是Mysql的选择查询,劈列数据有条件地为2分新列

user_id | amount 

的量可以是正的或负的。积极意味着购买积分,消极意味着积分消耗。 所以,我希望有一个查询基本上返回

user_id | Bought | Spent 

,我想总结一下正数的值到买和到消费总金额达负方向调整,我被USER_ID要组

目前我有这样的查询

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

但它总结了正面和负面的价值。我如何编写查询来分离它们?

回答

2

查询内部的某些条件语句应该很好地工作:

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

感谢,它的工作。 – rkt 2012-03-23 23:54:39

+0

@JYelton让你在写我的时候张贴。没有意识到你发布。 – kasavbere 2012-03-23 23:57:11

+0

通常SO会试图帮助您使用JS横幅,让您知道某些内容已发布,但是如果文章相距很远,通常不足以提醒。 – JYelton 2012-03-24 00:10:44

0

我不是100%的语法是在MySQL一样...但它看起来像它:

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 

你可以去简单地周围放置的情况报表sum()(包括end但不是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

检查:

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