我正在尝试为条形图创建查询,该查询显示订单数量的每月概览。
我正在使用的查询正确地向我提供了每月的细分,但是当我跳过一个月时,它没有为该月提供0
,只是根本没有添加。
由于此图表预计有12个数字,因此缺失月份之后的所有内容都将不准确。
当前尝试:
select Month(dateCreated) as monthID,
Monthname(dateCreated) as monthName,
count(dateCreated) as totalRewards
from reward
where Year(dateCreated) = '2018'
GROUP BY monthID
如果我们假设它目前是May 2018
,我希望看到1月 - 5月,当前计数即使月份没有订单(4月= 0)。
最好的方法是在所提供的年份中包括迄今为止发生的所有月份,然后包括适当的数量?
答案 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;