当前年度每月MySQL平均计数(包括没有数据的月份)

时间:2018-01-21 23:19:23

标签: mysql stored-procedures

我正在尝试为条形图创建查询,该查询显示订单数量的每月概览。

我正在使用的查询正确地向我提供了每月的细分,但是当我跳过一个月时,它没有为该月提供0,只是根本没有添加。

由于此图表预计有12个数字,因此缺失月份之后的所有内容都将不准确。

当前尝试:

select Month(dateCreated) as monthID,
   Monthname(dateCreated) as monthName,
   count(dateCreated) as totalRewards
from reward
where Year(dateCreated) = '2018'
GROUP BY monthID

enter image description here

如果我们假设它目前是May 2018,我希望看到1月 - 5月,当前计数即使月份没有订单(4月= 0)。

最好的方法是在所提供的年份中包括迄今为止发生的所有月份,然后包括适当的数量?

1 个答案:

答案 0 :(得分:1)

您可以模拟月份表,然后LEFT JOIN reward表格。为确保您只获得有效结果,最好使用SUM()而不是COUNT()聚合:

SELECT
    months.id as monthID,
    MONTHNAME(CONCAT('2018-',months.id,'-01')) as monthName,
    SUM(CASE WHEN dateCreated IS NULL THEN 0 ELSE 1 END) as totalRewards
FROM
(
    SELECT 1 AS id
    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
) as months
LEFT JOIN reward
   ON MONTH(reward.dateCreated) = months.id
   AND YEAR(dateCreated) = '2018'
GROUP BY monthID, monthName
ORDER BY monthID;

SQL Fiddle