mysql按照天统计报表当天没有数据填0的实现代码

 更新时间:2018年01月26日 11:36:44   作者:只会一点java  
这篇文章主要介绍了mysql按照天统计报表当天没有数据填0的实现方法,需要的朋友可以参考下

1.问题复现:

按照天数统计每天的总数,如果其中有几天没有数据,那么group by 返回会忽略那几天,如何填充0?如下图,统计的10-3~10-10 7天的数据,其中只有8号和10号有数据,这样返回,数据只有2个,不符合报表统计的需求。期望没有值填0

2.换个思维:

我们用一组连续的天数作为左表然后left join 要查询的数据 最后group by.:连续天数表 t1 left join 业务数据  t2 group by t1.day ,如下图:

SELECT
 t1.`day`,
 COUNT(t2.user_id) payment_num
FROM
 (SELECT
 @cdate := DATE_ADD(@cdate, INTERVAL - 1 DAY) DAY
 FROM
 (SELECT
  @cdate := DATE_ADD('20171219', INTERVAL + 1 DAY)
 FROM
  order) t0
 LIMIT 7) t1
 LEFT JOIN
 (SELECT
  DATE(a.create_time) DAY,
  a.user_id
 FROM
  pay_payment a
  JOIN dealer_store b
  ON a.order_no = b.order_no
 WHERE DATE(create_time) <= '20171219'
  AND DATE(create_time) > DATE_SUB('20171219', INTERVAL 7 DAY)
  ) t2
 ON t2.day = t1.day
GROUP BY t1.`day`;

2.1 连续天数表

SELECT
 @cdate := DATE_ADD(@cdate, INTERVAL - 1 DAY) DAY
 FROM
 (SELECT
  @cdate := DATE_ADD('20171219', INTERVAL + 1 DAY)
 FROM
  order) t0
 LIMIT 7

执行结果如下:

SQL分析:

1. @cdate :=  是定义名为cdate的变量并赋值(select 后面必须用:=)

2.@cdate := DATE_ADD('20171219', INTERVAL + 1 DAY) 按照传入的日期'20171219',加一天

3.SELECT @cdate := DATE_ADD('20171219', INTERVAL + 1 DAY) FROM `order`  找一张表记录肯定大于10条的即可,执行结果如下:

4.@cdate := DATE_ADD(@cdate, INTERVAL - 1 DAY) DAY  把定义的cdate变量天数-1(自减)

5.LIMIT 7 限制一下条数,大功告成,我们得到了指定日期往前7天的记录

2.2 左关联然后分组

left join group by t1.day

即按照左表关联业务数据,根据左表的日期分组,即分成了指定的7天数据,有记录就统计条数,没有记录就是0

最终执行结果:

总结

以上所述是小编给大家介绍的mysql按照天统计报表当天没有数据填0的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • MySQL 数据类型 详解

    MySQL 数据类型 详解

    MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数。许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指定数值字段中的值是否有正负之分或者用零填补。
    2009-10-10
  • 数据库SQL脚本文件导入到mysql数据库的两种方式

    数据库SQL脚本文件导入到mysql数据库的两种方式

    MySQL作为一种关系型数据库管理系统,它是在Web服务器中广泛使用的,它把数据存储在表中,这篇文章主要介绍了数据库SQL脚本文件导入到mysql数据库的两种方式,需要的朋友可以参考下
    2025-04-04
  • MySQL中数据查询语句整理大全

    MySQL中数据查询语句整理大全

    查询语句是以后在工作中使用最多也是最复杂的用法,如何精准的查询出想要的结果以及用最合理的逻辑去查询尤为重要,下面这篇文章主要给大家介绍了关于MySQL中数据查询语句的相关资料,需要的朋友可以参考下
    2023-04-04
  • MySql之视图索引的具体使用

    MySql之视图索引的具体使用

    MySql 视图索引是一种基于视图的索引,它允许在视图上创建索引以提高查询性能,本文主要介绍了MySql之视图索引的具体使用,感兴趣的可以了解一下
    2023-08-08
  • SQL汇总统计与GROUP BY过滤查询实现

    SQL汇总统计与GROUP BY过滤查询实现

    这篇文章主要介绍了SQL汇总统计与GROUP BY过滤查询实现,GROUP BY 实质是先排序后分组,遵照索引建的最佳左前缀。当无法使用索引时,增大max_length_for_sort_data和sort_buffer参数的值
    2023-01-01
  • Mysql中文汉字转拼音的实现(每个汉字转换全拼)

    Mysql中文汉字转拼音的实现(每个汉字转换全拼)

    这篇文章主要介绍了Mysql中文汉字转拼音的实现,并且每个汉字会转换全拼,使用Mysql自定义函数实现,需要的朋友可以参考下
    2014-06-06
  • mysql修改sql_mode报错的解决

    mysql修改sql_mode报错的解决

    今天在Navicat中运行sql语句创建数据表出现了错误Err 1067。本文主要介绍了mysql修改sql_mode报错的解决,感兴趣的可以了解一下
    2021-09-09
  • MySql存储过程异常处理示例代码分享

    MySql存储过程异常处理示例代码分享

    在网上查了好多资料,发现关于mysql的异常处理资料都是一些错误号列表,对于平时运行中,我们可能更多的希望能够记录准确的错误消息到日志中
    2012-06-06
  • 详解腾讯云CentOS7.0使用yum安装mysql及使用遇到的问题

    详解腾讯云CentOS7.0使用yum安装mysql及使用遇到的问题

    本篇文章主要介绍了腾讯云CentOS7.0使用yum安装mysql,详细的介绍了使用yum安装mysql及使用遇到的问题,有兴趣的可以了解一下。
    2017-01-01
  • MySQL实现批量插入测试数据的方式总结

    MySQL实现批量插入测试数据的方式总结

    在开发过程中经常需要一些测试数据, 这个时候如果手敲的话, 十行二十行还好, 多了就很死亡了, 接下来介绍两种常用的MySQL测试数据批量生成方式,希望对大家有所帮助
    2023-05-05

最新评论