即使某个小时内没有事件,我也需要每小时进行一次事件计数。 如何在不创建临时表的情况下将这些小时数包含在组中?我检查了所有类似的帖子,但找不到答案。 可以说
select extract(hour from time(date_time)) as Hour, count(*)
from table_A
group by hour
order by hour
这让我只计算发生事件的小时数。
我正在使用Bigquery
谢谢
答案 0 :(得分:2)
使用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;
这比Postgres数据库支持的generate_series()
稍微复杂些,但是它以简单的方式完成了工作。
答案 1 :(得分:0)
您的问题已用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