我试图在过去几个月制作一个MySQL列总和的图表。现在我有SQL语句:
SELECT SUM(Distance) AS `Data`, MONTH(`Date`) AS `DateVal`
FROM `Activities`
WHERE Date > ADDDATE(NOW(), INTERVAL -10 MONTH) GROUP BY YEAR(`Date`),
MONTH(`Date`) ORDER BY Date DESC LIMIT 10
此SQL语句不起作用,因为它只会拉出包含数据的月份。有没有办法让SQL服务器在没有数据的月份返回0?
我唯一能找到的就是使用10个不同的查询,有更好的方法吗?
答案 0 :(得分:0)
由于可能并非所有月份都有日期,因此您必须从某个位置获取月份列表:为此,您需要一个包含月份列表的表格,然后在查询中加入该表格。这样,没有数据的所有月份都将为0作为值。
CREATE TABLE months (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(10) NOT NULL
)
INSERT INTO months VALUES
(1, 'january'), (2, 'february'), (3, 'march'),
(4, 'april'), (5, 'may'), (6, 'june'),
(7, 'july'), (8, 'august'), (9, 'september'),
(10, 'october'), (11, 'november'), (12, 'december');
SELECT SUM(Distance) AS `Data`, MONTH(`Date`) AS `DateVal`
FROM `Activities` JOIN months on MONTH(`Date`) = months.`id`
WHERE Date > ADDDATE(NOW(), INTERVAL -10 MONTH) GROUP BY YEAR(`Date`),
MONTH(`Date`) ORDER BY Date DESC LIMIT 10