龙空技术网

mysql按日、月进行统计,不全的记录补0

西红柿炖土豆 1096

前言:

今天你们对“mysql补0函数”大概比较看重,小伙伴们都想要知道一些“mysql补0函数”的相关资讯。那么小编在网络上搜集了一些对于“mysql补0函数””的相关文章,希望大家能喜欢,你们快快来学习一下吧!

mysql按照日或者月进行统计的时候,如果当天没有记录,会导致日期缺少,这里采用关联方式进行模拟日期表

1、生成日期表

select @cdate:=DATE_ADD(@cdate,INTERVAL -1 day) as DAY_TIMEfrom(select @cdate:=DATE_ADD(STR_TO_DATE('2021-10-31','%Y-%m-%d'),INTERVAL 1 day)from b2b_order limit 31) aa where @cdate>'2021-10-01' and @cdate<='2021-11-01'

生成日期表后,就是进行左关联

select STR_TO_DATE(a.DAY_TIME,'%Y-%m-%d'),round(COALESCE(b.totalMoney,0),2)from (select @cdate:=DATE_ADD(@cdate,INTERVAL -1 day) as DAY_TIMEfrom(select @cdate:=DATE_ADD(STR_TO_DATE('2021-10-31','%Y-%m-%d'),INTERVAL 1 day)from b2b_order limit 31) aa where @cdate>'2021-10-01' and @cdate<='2021-11-01') a left join(select STR_TO_DATE(t.ORDER_DATE,'%Y-%m-%d') as DAY_TIME,sum(t.TOTAL_DEAL_AMOUNT) as totalMoneyfrom  BASE_ORDER twhere t.dr = 0  and t.ORDER_DATE>= STR_TO_DATE('2021-10-01','%Y-%m-%d') and t.ORDER_DATE<= STR_TO_DATE('2021-11-01','%Y-%m-%d')GROUP BY STR_TO_DATE(t.ORDER_DATE,'%Y-%m-%d')) bon a.DAY_TIME = b.DAY_TIMEorder by a.day_time

查询结果如下

如果按照月份进行统计思路一样的,先构建月份表

select @cdate:=DATE_ADD(@cdate,INTERVAL -1 month),DATE_FORMAT(@cdate,'%Y-%m') as DAY_TIMEfrom (select @cdate:=DATE_ADD(STR_TO_DATE('2021-12-01','%Y-%m-%d'),INTERVAL 1 month)from b2b_order limit 12) aawhere @cdate>'2021-01-01' and @cdate<='2022-01-01'

查询结果

再进行关联查询

select a.DAY_TIME,round(COALESCE(tttt.total_money,0),2) from  (select @cdate:=DATE_ADD(@cdate,INTERVAL -1 month),DATE_FORMAT(@cdate,'%Y-%m') as DAY_TIME     from      (select @cdate:=DATE_ADD(STR_TO_DATE('2021-12-01','%Y-%m-%d'),INTERVAL 1 month)         from b2b_order limit 12) aa        where @cdate>'2021-01-01' and @cdate<='2022-01-01') aleft join  (select ttt.DAY_TIME ,sum(ttt.total_money) as total_money   from      (select DATE_FORMAT(tt.DAY_TIME,'%Y-%m') as DAY_TIME,tt.total_money      from         (select STR_TO_DATE(t.ORDER_DATE,'%Y-%m-%d') as DAY_TIME,sum(t.TOTAL_DEAL_AMOUNT) as total_money         from  BASE_ORDER t           where t.dr = 0           and t.ORDER_DATE>= STR_TO_DATE('2021-01-01','%Y-%m-%d')           and t.ORDER_DATE<= STR_TO_DATE('2022-01-01','%Y-%m-%d')            GROUP BY STR_TO_DATE(t.ORDER_DATE,'%Y-%m-%d')        ) tt       ) ttt      GROUP BY ttt.DAY_TIME    ) tttton a.DAY_TIME = tttt.DAY_TIME order by a.day_time

查询结果

这几个sql中涉及到的函数

STR_TO_DATE('字符串','%Y-%M-%D')

DATE_UP()

DATE_FORMAT()

ROUND

COALESCE --没有记录则为0

标签: #mysql补0函数