这篇文章主要介绍mysql如何按照天统计报表当天没有数据填0,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
<强> 1。问题复现:强>
按照天数统计每天的总数,如果其中有几天没有数据,那么group by返回会忽略那几天,如何填充0 ?如下图,统计的三分~演出7天的数据,其中只有8号和10号有数据,这样返回,数据只有2个,不符合报表统计的需求。期望没有值填0
<强> 2。换个思维:强>
我们用一组连续的天数作为左表然后离开加入要查询的数据最后组。:连续天数表t1离开加入业务数据,t2 group by t1。天,如下图:
选择 ,t1.‘天’, ,数(t2.user_id) payment_num 从 ,(选择 ,@cdate :=, DATE_ADD (@cdate, INTERVAL 作用;1,天),一天 ,从 ,(选择 @cdate 才能;:=,DATE_ADD (& # 39; 20171219 & # 39;,, INTERVAL +, 1,) ,从 顺序)才能t0 LIMIT 7), t1 LEFT 加入 ,(选择 日期(a.create_time),才能一天, a.user_id才能 ,从 ,pay_payment JOIN 才能;dealer_store b 提醒才能a.order_no =b.order_no ,WHERE 日期(create_time), & lt;=, & # 39; 20171219 & # 39; ,,以及日期(create_time),祝辞,DATE_SUB (& # 39; 20171219 & # 39;,, INTERVAL 7,天) ),才能t2 ,提醒t2.day =t1.day GROUP BY  t1.‘天’;
<强> 2.1连续天数表强>
选择 ,@cdate :=, DATE_ADD (@cdate, INTERVAL 作用;1,天),一天 ,从 ,(选择 @cdate 才能;:=,DATE_ADD (& # 39; 20171219 & # 39;,, INTERVAL +, 1,) ,从 顺序)才能t0 以前,LIMIT 7 >执行结果如下:
SQL分析:
1。<代码> @cdate:=,是定义名为cdate的变量并赋值(选择后面必须用:=)代码>
2 <代码>。@cdate:=DATE_ADD(& # 39; 20171219 & # 39;间隔+ 1天)代码>按照传入的日期& # 39;20171219 & # 39;加一天
3。<代码>选择@cdate:=DATE_ADD(& # 39; 20171219 & # 39;间隔+ 1天)从“订单”,代码>找一张表记录肯定大于10条的即可,执行结果如下:
4 <代码>。@cdate:=DATE_ADD (@cdate,间隔- 1天)DAY 代码>把定义的cdate变量天数1(自减)
5。限制7限制一下条数,大功告成,我们得到了指定日期往前7天的记录
<强> 2.2左关联然后分组强>
<代码>左加入group by t1。天代码>
即按照左表关联业务数据,根据左表的日期分组,即分成了指定的7天数据,有记录就统计条数,没有记录就是0
最终执行结果:
以上是“mysql如何按照天统计报表当天没有数据填0”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
mysql如何按照天统计报表当天没有数据填0