1

我正在使用 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 db 中做到这一点?我在其他帖子中并不清楚答案,并且是针对 MySQL 的。同样的事情对我有用吗?

有什么基本的 SQL 方法可以做到这一点吗?似乎是人们需要使用的常见简单事物。

4

1 回答 1

0

一种选择是创建一个 Hours 表(您只需执行一次)

插入 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 小时返回总和 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);
于 2015-11-25T22:52:14.507 回答