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

mysql如果没有结果,则选择日期的默认值,mysql,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

我有一个按天分组的付款表

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

由于您没有
付款
表中的所有日期,您可以执行以下操作:

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

此处示例:

您的表中可能没有特定日期的数据,因此您不能要求引擎返回该数据。 它根本不知道人类的日历:-)


因此,您必须回顾性地为这些天生成带有零的存根记录,或者使用@bernie建议的方法(这种特殊方式),或者在永久表中具体化,保存天数从1到31

可能重复检查此答案:不,我没有付款表中的所有日期,但我需要返回它们,就像它们是一样,如果它们是empty@BlairAnderson:根据您的评论,请参见编辑后的答案。