MySQL CASE,SUM,GROUP BY

时间:2016-09-03 16:20:31

标签: mysql group-by sum case

我希望根据paymentstatus值从两个不同的列中获得付款状态总和 - 但此查询会为sum返回null。为什么不起作用?

select payment_status,
CASE 
WHEN 'PAID' THEN sum(paid_amount)
when 'Not Paid' then sum(total_amount_due )
END 
from monthly_fee
group by payment_status;

4 个答案:

答案 0 :(得分:0)

select sum(CASE WHEN payment_status = 'PAID' THEN paid_amount else 0 end) as paid,
       sum(CASE WHEN payment_status = 'Not Paid' THEN total_amount_due else 0 end) as due
from monthly_fee

答案 1 :(得分:0)

如果您需要此条件,则需要在case

中添加该列
select payment_status,
       (case payment_status
             when 'Paid' then sum(paid_amount)
             when 'Not Paid' then sum(total_amount_due )
        end) 
from monthly_fee
group by payment_status;

这似乎是编写查询的一种奇怪方式,除非你真的想要两行。

答案 2 :(得分:0)

您的WHEN条款不是条件。

我希望看到像

这样的东西
select payment_status,
CASE 
WHEN payment_status = 'PAID' THEN sum(paid_amount)
when payment_status = 'Not Paid' then sum(total_amount_due )
END 
from monthly_fee
group by payment_status;

答案 3 :(得分:0)

您可以尝试以下查询:

select sum(if(payment_status = 'PAID', paid_amount, 0) 
       + if(payment_status = 'Not Paid', total_amount_due, 0)) 
from monthly_fee
group by payment_status;
相关问题