Mysql select query, условное разбиение данных столбца на 2 новых столбца - PullRequest
0 голосов
/ 24 марта 2012

У меня есть таблица с именем credit_log и столбцы:

user_id | amount

Сумма может быть положительной или отрицательной.Положительный означает, что кредиты куплены, отрицательный означает, что кредиты потрачены.Итак, я хочу получить запрос, который возвращает

user_id | Bought | Spent 

по существу, я хочу суммировать положительные значения суммы в Bought и суммировать отрицательные суммы в Spent, и я хочу сгруппировать по user_id

В настоящее время у меня есть такой запрос

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

, но он суммирует как положительные, так и отрицательные значения.Как я могу написать запрос для их разделения?

Ответы [ 4 ]

2 голосов
/ 24 марта 2012

Некоторые условные операторы внутри запроса должны работать хорошо:

SELECT
    user_id,
    SUM(IF(amount > 0, amount, 0)) bought,
    SUM(IF(amount < 0, amount, 0)) spent
FROM credit_log
GROUP BY user_id;
1 голос
/ 24 марта 2012
 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 голосов
/ 24 марта 2012

проверьте это:

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
0 голосов
/ 24 марта 2012

Я не на 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).

...