首页 > 解决方案 > 从当前月份和前 6 个月开始每月计数一列(包括空值)?

问题描述

我有一个名为观察的表,其中我有一个名为观察的字段和创建观察的日期,我想查看在当前月份和前 6 个月内每月进行了多少观察,但我想如果在某个月份没有观察到,则将其计为 0。

我做了这个查询

SELECT COUNT(observation) AS observ, MONTH(created_at) AS mont
FROM observations
WHERE created_at >= DATE_ADD(NOW(), INTERVAL -6 MONTH)
GROUP BY mont;

在表中只有4个月的观察,查询的结果是这样的

在此处输入图像描述

但我希望它能给我这样的结果

在此处输入图像描述

我该怎么做?

标签: mysqlsqldatabasecount

解决方案


为此,您必须加入月表

SELECT observ, MO.mo as mont
FROM (SELECT COUNT(observation) AS observ, MONTH(created_at) AS mont
FROM observations o 
WHERE created_at >= DATE_ADD(NOW(), INTERVAL -6 MONTH)
GROUP BY mont) o RIGHT JOIN 
( SELECT 1 as mo UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6
UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12) MO
ON o.mont = MO.mo
观察 | 蒙特
-----: | ---:
  | 1
  | 2
  | 3
  | 4
  | 5
  | 6
  | 7
  | 8
     1 | 9
  | 10
  | 11
  | 12

db<>在这里摆弄


推荐阅读