我正在尝试创建一个条形图查询,该图显示订单数量的每月概览。
我使用的查询正确地为我提供了每月的分割,但是当我跳过一个月时,它没有提供该月的0
,只是根本不添加它。
由于此图表预计有 12 个数字,因此缺失月份之后的所有内容都会不准确。
当前尝试:
select Month(dateCreated) as monthID,
Monthname(dateCreated) as monthName,
count(dateCreated) as totalRewards
from reward
where Year(dateCreated) = '2018'
GROUP BY monthID
如果我们假设当前是 2018 年 5 月
,我想查看 1 月至 5 月的当前计数,即使该月没有订单(4 月 = 0)。
包含所提供年份中迄今为止发生的所有月份及其适当计数的最佳方式是什么?
最佳答案
您可以模拟月份表,然后针对它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;
关于MySQL 当年每月平均计数(包括没有数据的月份),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48372765/