Сумма столбца в тот же час вместе. Если для этого часа нет записи, сохраните значение как 0

Я использую 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, которым я могу это сделать? Кажется, что это обычная простая вещь, которую люди должны использовать.


person Javier    schedule 25.11.2015    source источник
comment
СГРУППИРУЙ результат по извлеченному часу из Date столбца и sum() экземпляров.   -  person Kamil Gosciminski    schedule 26.11.2015
comment
@ConsiderMe, это не даст ему сумму экземпляров для несуществующего часа времени, что является требованием   -  person Harsh    schedule 26.11.2015
comment
@Harsh согласился, OP нужно сгенерировать часы дат, а затем LEFT JOIN к нему.   -  person Kamil Gosciminski    schedule 26.11.2015
comment
как мне генерировать часовые даты, это мой самый большой вопрос. я новичок в SQL   -  person Javier    schedule 26.11.2015


Ответы (1)


Один из вариантов — создать таблицу «Часы» (вы делаете это только один раз).

Вставка 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

Если Hour является частью поля даты, вам придется вытащить часть Hours из столбца.

LEFT JOIN вернет все записи в HoursTable вместе с любыми соответствующими записями в основной таблице. Итак, для вашего примера выше вам будет возвращена сумма 0 за 5-й час.

Пример создания таблицы...

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);
person Doug    schedule 25.11.2015
comment
мой самый большой вопрос, как вы создаете таблицу Hours? Я новичок в SQL, то, что вы упустили, - это именно то, что я не знаю, как сделать для этой проблемы. - person Javier; 26.11.2015
comment
Добавлен пример создания таблицы - person Doug; 27.11.2015