Мне нужно рассчитывать события по часам, даже если в какой-то час событий нет. Как я могу включить эти часы в группу, не создавая временную таблицу? Я проверил все подобные сообщения, но не смог найти ответ. Допустим
select extract(hour from time(date_time)) as Hour, count(*)
from table_A
group by hour
order by hour
это заставляет меня рассчитывать только на часы, где есть событие.
Я использую Bigquery
Спасибо
Ваш вопрос помечен с помощью SQL. Для решения SQL я бы сгенерировал 24 часа на лету и перекрестное соединение с этим. Например:
;WITH twenty_four_hour_range AS
(
SELECT
1 AS _hour
UNION ALL
SELECT
1 + _hour
FROM twenty_four_hour_range
WHERE 1 + _hour <=24
)
select _hour, COUNT(*)
from table_A CROSS JOIN
twenty_four_hour_range
group by twenty_four_hour_range._hour
order by 1
Используйте generate_array()
и unnest()
для генерации часов:
select h, count(a.date_time)
from unnest(generate_array(0, 23)) h left join
table_A a
on extract(hour from time(a.date_time)) = h
group by h
order by h;
Это немного сложнее, чем метод generate_series()
поддерживаемый базами данных Postgres, но он выполняет свою работу простым способом.