我正在使用PrestoDB,需要将同一小时内的列求和,如果该小时没有记录,则将值存储为0
我有这张桌子:
Date |Instances
2015-10-12 06:15:00.000 |2
2015-10-12 06:45:00.000 |5
2015-10-12 04:15:00.000 |2
2015-10-12 04:25:00.000 |3
2015-10-12 03:15:00.000 |5
2015-10-12 02:15:00.000 |6
2015-10-12 01:15:00.000 |6
我需要这个输出:
TIMEHOUR | INSTANCESUM
6 | 7
---> 5 | 0 <---
4 | 5
3 | 5
2 | 6
1 | 6
我怎么能这么做?我发现了一些关于使用临时表格的信息。如何在Presto数据库中做到这一点?我在其他帖子中不清楚答案,这些都是针对MySQL的。同样的东西对我有用吗?
有什么基本的SQL方法可以做到这一点吗?这似乎是人们需要使用的一种普通而简单的东西。
一个选项是创建一个小时表(您只做一次)
插入1、2、3、4、5、6、7、8、9、10。。。24
然后像这样LEFT JOIN到您的主表。。。
SELECT HoursTable.Hour, SUM(MainTable.Hour)
FROM HoursTable
LEFT JOIN MainTable
ON HoursTable.Hour = MainTable.Hour
GROUP BY HoursTable.Hour
如果"小时"是日期字段的一部分,则必须拉出该列的"小时"部分。
LEFT JOIN将返回HoursTable中的所有记录以及主表中的任何匹配记录。因此,对于上面的示例,您将在第5小时返回一个Sum为0的值。
创建表示例。。。
CREATE TABLE Hours (Hour INT);
INSERT Hours VALUES (0);
INSERT Hours VALUES (1);
INSERT Hours VALUES (2);
INSERT Hours VALUES (3);
INSERT Hours VALUES (4);
INSERT Hours VALUES (5);
INSERT Hours VALUES (6);
INSERT Hours VALUES (7);
INSERT Hours VALUES (8);
INSERT Hours VALUES (9);
INSERT Hours VALUES (10);
INSERT Hours VALUES (11);
INSERT Hours VALUES (12);
INSERT Hours VALUES (13);
INSERT Hours VALUES (14);
INSERT Hours VALUES (15);
INSERT Hours VALUES (16);
INSERT Hours VALUES (17);
INSERT Hours VALUES (18);
INSERT Hours VALUES (19);
INSERT Hours VALUES (20);
INSERT Hours VALUES (21);
INSERT Hours VALUES (22);
INSERT Hours VALUES (23);