我想计算相对于它们在数据库中写入的月份的行数。我的数据库有一个名为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/

10-10 04:20