我想计算相对于它们在数据库中写入的月份的行数。我的数据库有一个名为created_date
的列。您可以在下面看到我做了什么:
select month(created_date) as "Month", count(created_date) as "Count" from transactions group by month(created_date)
该查询返回的内容如下所示:
{'Month':1,'Count':10}
发生这种情况是因为我的数据库中只有一个月的时间,而我需要有所有结果的月数,包括数据库中不存在的月数,如下所示:
{'Month':1,'Count':10}
{'Month':2,'Count':0}
{'Month':3,'Count':0}
{'Month':4,'Count':0}
{'Month':5,'Count':0}
{'Month':6,'Count':0}
{'Month':7,'Count':0}
{'Month':8,'Count':0}
{'Month':9,'Count':0}
{'Month':10,'Count':0}
{'Month':11,'Count':0}
{'Month':12,'Count':0}
我该怎么办?
最佳答案
您可以JOIN
到几个月的列表,这样即使表中不存在的月份也可以得到一行:
SELECT m.month,
COUNT(t.created_date)
FROM (SELECT 1 AS month UNION ALL SELECT 2 UNION ALL SELECT 3
UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) m
LEFT JOIN transactions t ON MONTH(t.created_date) = m.month
GROUP BY m.month
关于mysql - SQL查询带来列中不存在的月份,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58765989/