mysql - MySQL在结果集中添加缺少的月份
问题描述
我正在尝试在此结果集中添加缺失的月份。
如果缺少月份,请将其添加为Quantita的值 0 。
SELECT MONTH(Data) AS Mese,Count(*) AS Quantita
FROM prenotazioni
WHERE Cancellata IS NULL
AND FKCampo = 1
AND YEAR(Data) = YEAR(CURDATE()) -1
GROUP BY Mese
ORDER BY Mese ASC
+------+----------+
| Mese | Quantita |
+------+----------+
| 4 | 123 |
+------+----------+
| 5 | 100 |
+------+----------+
| 7 | 377 |
+------+----------+
| 9 | 54 |
+------+----------+
解决方案
以下是混乱的,我相信必须有一种更清洁的方式......
所以,首先我创建一个包含所有月份的表:
CREATE TABLE all_months (
month_num INT
);
INSERT INTO all_months VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)
然后我将您的查询与此表(在我的情况下在右侧)连接起来,并使用 case-when 来确定是否有计数:
SELECT
all_months.month_num,
CASE
WHEN tmp.Quantita is NULL THEN 0
ELSE tmp.Quantita
END as Quantita
FROM (
SELECT MONTH(Data) AS Mese,Count(*) AS Quantita
FROM prenotazioni
WHERE Cancellata IS NULL
AND FKCampo = 1
AND YEAR(Data) = YEAR(CURDATE()) -1
GROUP BY Mese
) as tmp
RIGHT JOIN all_months on all_months.month_num=tmp.Mese
ORDER BY all_months.month_num ASC
您的查询现在已经完成tmp
,之后正在订购。结果是:
month_num Quantita
1 1
2 2
3 0
4 0
5 0
6 0
7 0
8 3
9 1
10 0
11 1
12 1
演示:这里
推荐阅读
- php - 如何通过术语 id WordPress 获取自定义帖子的有限或特定字段?
- kubernetes - 启动 minikube 时是否可以挂载多个卷?
- symfony - 简单派生身份问题
- javascript - 解构对象像参数一样传递给函数
- xamarin.forms - 如何使用 xamarin.forms 在 android 中删除 datepicker 的底线
- postgresql - Postgres:优化一个巨大的 GROUP BY
- swift - swift如何动态更改自定义mkannotationview
- docker - 来自 gitlab-ci docker 的 SSH 在“SSH2_MSG_KEX_ECDH_REPLY”上失败
- loops - 包含多个 if 语句的单个循环或多个内部带有循环的 if 语句?
- sql - sqlite如何用前一个值替换null