我有一个基本的SQL查询:
SELECT MONTH(created_at), COUNT(id) as total FROM `clients` GROUP BY MONTH(created_at)
它返回按月分组的数据,如:
MONTH(created_at) | total
09 1
10 2
如何将剩余月份填写为零?所以,结果我需要得到所有月份:
MONTH(created_at) | total
09 1
.. 2
12 5
我试过这种方式:
SELECT months.id, COUNT(clients.id) as total FROM `months` LEFT JOIN `clients` ON MONTH(created_at) = months.id GROUP BY MONTH(created_at)
答案 0 :(得分:2)
使用包含所有月份编号的派生表格以及您的表格left join
。
SELECT mths.mth, COUNT(c.id) as total
FROM (select 1 as mth 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) mths
LEFT JOIN `clients` c on mths.mth=month(c.created_at)
GROUP BY mths.mth
答案 1 :(得分:2)
最佳做法是使用CALENDAR表,您可以从中查询所需的时间段,然后将连接表与数据一起保留。 或者您可以简单地生成所需的句点列表。如果您有一个小周期,您可以使用派生表。在这种情况下,最快的方法是excel生成列表。
答案 2 :(得分:1)
感谢大家的回答,特别是Alex,这种方式有效:
echo 'token.mat'>>.gitignore