MySQL按日期查询补0不建立表方法

本文介绍了如何在MySQL查询中处理缺失日期数据的问题,通过左连接和IF判断实现每日统计结果集补0,确保无数据的日子也能记录。首先不建表查询出指定日期范围内的所有日期,然后将此日期集与实际数据进行左连接,并用IF判断填充缺失数据为0,从而完成完整的每日统计。这种方法适用于需要按日期周期统计的数据场景。
摘要由CSDN通过智能技术生成

在做数据统计的时候,经常会遇到以每天,每月为周期的统计。有时候,某一天没有数据时按照group查询会导致数据为0的天数没被记录。下面提供一个方法思路,在使用mysql查询时,不需要额外建表即可以做到给结果集补0

1.不建表查询日期

SELECT 
	DATE_FORMAT( date_add(concat('2020-08-20'), interval(help_topic_id) DAY),'%Y-%m-%d') date
FROM 
	mysql.help_topic
WHERE 
	help_topic_id  <=  timestampdiff(DAY,concat('2020-08-20'),concat('2020-10-05'))

结果如下:
在这里插入图片描述
2. 分组数据统计

select 
	count(*) as all_num, DATE(update_time) as date 
from 
	tb_flow 
where
	action='cell_detection' group by date

结果如下:
在这里插入图片描述

  1. 建立左连接
select
  t1.date,
  t2.all_num
from
  (
    SELECT
      DATE_FORMAT(
        date_add(
          concat('2020-04-29'),
          interval(help_topic_id) DAY
        ),
        '%Y-%m-%d'
      ) date
    FROM
      mysql.help_topic
    WHERE
      help_topic_id <= timestampdiff(DAY, concat('2020-04-29'), concat('2020-10-05'))
  ) as t1
left join (
    select
      count(*) as all_num,
      DATE(update_time) as date
    from
      tb_flow
    where
      action = 'cell_detection'
    group by
      date
  ) as t2 on t1.date = t2.date

结果如下:
在这里插入图片描述

  1. 加上if判断实现补0
select
  t1.date,
  if(t2.all_num is null, 0, t2.all_num) as all_num
from
  (
    SELECT
      DATE_FORMAT(
        date_add(
          concat('2020-04-29'),
          interval(help_topic_id) DAY
        ),
        '%Y-%m-%d'
      ) date
    FROM
      mysql.help_topic
    WHERE
      help_topic_id <= timestampdiff(DAY, concat('2020-04-29'), concat('2020-10-05'))
  ) as t1
  left join (
    select
      count(*) as all_num,
      DATE(update_time) as date
    from
      tb_flow
    where
      action = 'cell_detection'
    group by
      date
  ) as t2 on t1.date = t2.date

结果如下:
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值