即使没有数据,也可以为每个月的SQL提取数据

时间:2018-03-27 13:48:54

标签: mysql

我试图在过去几个月制作一个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个不同的查询,有更好的方法吗?

1 个答案:

答案 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