SQL技巧计数按行数计算?

时间:2017-09-23 21:08:31

标签: mysql sql

我有一个基本的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)

3 个答案:

答案 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