我想从表中选择数据,在 JavaScript 中获取结果并将其打印在图表中(x = 日期,y = 数字)
我有以下 DATA
表(注意:我试图将它放在 markdown 中,因此它显示为 HTML 表,但它似乎不起作用):
| date | number |
|---------|--------|
| 2015-01 | 12 |
| 2015-02 | 7 |
| 2015-04 | 4 |
和以下 SQL 选择:
SELECT date_format(date, '%Y-%m') AS date, number
FROM DATA
WHERE date >= '2015-01' AND date <= '2015-05'
GROUP BY date
ORDER BY date;
这给了我与输出完全相同的表格。但是,如果没有记录月份,我想要的是每个月用 0
一行。比如数据库中没有记录三月,所以我要的结果:
| date | number |
|---------|--------|
| 2015-01 | 12 |
| 2015-02 | 7 |
| 2015-03 | 0 |
| 2015-04 | 4 |
| 2015-05 | 0 |
表格转到 5 月,因为在 SELECT 中我想要 1 月到 5 月之间的每个月。
问题是:有没有办法在 SQL 中执行此操作,或者我是否必须在 JavaScript 中对结果进行后处理以在我的最终表中添加空月份?
谢谢你的帮助
编辑:开始日期和结束日期是可变的,可以涵盖几年。所以,我想可以用一个包含月份的特殊表格来做一些事情,但我不知道如何...... 如果答案是后处理,那还可以(令人失望但还可以^^)
edit2:问题是@mauro 所说的“间隙填充”。它在 MySQL 中看起来相当复杂,所以我将对我的请求进行后处理。
最佳答案
我将创建第二个表DATA2
,其中每月一行 且数字为零。然后,而不是选择:
FROM DATA
我会选择:
FROM ( SELECT * FROM DATA UNION ALL SELECT * FROM DATA2 ) D
这样...如果 DATA 包含给定月份的值,您将从 DATA 获得总计,如果不...您将从 DATA2 获得零
关于javascript - SQL - 选择具有默认值的时间段上的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35383380/