【问题标题】:show days with 0 records in mysql query when grouping by date按日期分组时在 mysql 查询中显示 0 条记录的天数
【发布时间】:2020-04-27 10:34:32
【问题描述】:

我有一个 ID 和日期表。表格是这样的:

标识 |日期

5 | 2020-04-01

6 | 2020-04-06

7 | 2020-04-11

8 | 2020-04-11

我想按日期分组,所以我使用了这个:

select Date,count(id) from Table where Date between '2020-04-01' AND '2020-04-30' group by Date

我明白了:

日期 |计数(id)

2020-04-01 | 1

2020-04-06 | 1

2020-04-11 | 2

我需要的只是一个月中空闲日子的填充物。所以我需要表格而不是结果来包含所有有 0 条记录的日子,就像这样:

日期 |计数(id)

2020-04-01 | 1

2020-04-02 | 0

2020-04-03 | 0

2020-04-04 | 0

2020-04-05 | 0

2020-04-06 | 1

...等

mysql 有没有办法显示 0 条记录的天数?

【问题讨论】:

  • 考虑处理应用代码中数据显示的问题
  • @Strawberry 在我的情况下不起作用我将数据导出到 Excel。我通常在 excel 中做,但对于大桌子来说很烦人
  • 好吧,你总是可以建立一个实用表——要么是一个包含所有可预见日期的日历表(一个令人沮丧的小数据集),要么是一个整数表 (0-9)。

标签: mysql sql date join group-by


【解决方案1】:

如果您运行的是 MySQL 8.0,您可以使用递归查询来生成当月的天数列表,然后将您的表带上 left join,然后聚合:

with recursive cte as (
    select 
        date_format(current_date, '%Y-%m-01') dt, 
        date_format(current_date, '%Y-%m-01') + interval 1 month end_dt
    union all
    select dt + interval 1 day, end_dt from cte where dt < end_dt
)
select c.dt, count(t.id)
from cte c
left join mytable t on t.date = c.dt
group by c.dt

【讨论】:

  • 公司的db版本恐怕是5.7
猜你喜欢
  • 1970-01-01
  • 2020-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-22
  • 2017-06-20
相关资源
最近更新 更多