如果没有结果,mysql选择日期的默认值

时间:2017-02-17 22:31:59

标签: mysql

我有按日分组的付款表

select
 day(created),
 sum(payments.amount) 
from payments
group by day(created)

输出

day | amount
1   | 432
2   | 4567
5   | 345
6   | 2345
7   | 97

这很好,但是我想在没有付款的日子里放一些0

预期产出:

day | amount
1   | 432
2   | 4567
3   | 0
4   | 0
5   | 345
6   | 2345
7   | 97

2 个答案:

答案 0 :(得分:0)

由于您没有payments表中的所有日期,您可以这样做:

select
    d,
    ifnull(sum(p.amount),0) sum_amount
from (
         select 1 as d
         union all 
         select 2
         union all 
         select 3
         union all 
         select 4
         union all 
         select 5
         union all 
         select 6
         union all 
         select 7
    ) d
    left join payments p 
    on day(p.created) = d.d
group by d
order by d

此处示例:http://sqlfiddle.com/#!9/cb09d1/2

答案 1 :(得分:0)

您的表格中可能没有特定日期的数据,因此您无法要求引擎返回该数据。 简直不能,它基本上对人类日历一无所知: - )

因此,您必须回溯性地生成具有零的存根记录,或者使用@bernie建议的方法,这种特殊方式,或者在永久表格中保留从1到31的日期。