如果一个月内没有订单,我需要用 0 填补空白。
表格示例:
date product
2010-02-01 20
2010-03-01 10
2010-03-01 30
2010-06-01 15
我的基本查询是:
SELECT date,SUM(orders.product) AS product
FROM orders
GROUP BY month(date),YEAR(date)
那将返回:
date product
2010-02-01 20
2010-03-01 40
2010-06-01 15
但是我需要:
date product
2010-02-01 20
2010-03-01 40
2010-04-01 0
2010-05-01 0
2010-06-01 15
我制作了一张包含所有可能日期的表格:
datefield
2010-01-01
2010-02-01
2010-03-01
2010-04-01
2010-05-01
2010-06-01
2010-07-01
etc...
但是,当我尝试加入两者时,它不起作用。(编辑:仅适用于第一个缺失的月份。)
SELECT calendar.datefield AS DATE,
IFNULL(SUM(orders.product),0) AS product
FROM orders RIGHT JOIN calendar ON (MONTH(orders.date) = MONTH(calendar.datefield)) AND (YEAR(orders.date) = YEAR(calendar.datefield))
WHERE (calendar.datefield BETWEEN (SELECT MIN(DATE(date)) FROM orders) AND (SELECT MAX(DATE(date)) FROM orders))
GROUP BY DATE