我成功使用 PostgreSQL width_bucket(val, min, max, buckets)
函数将我的数据集划分为大小相等的存储桶。但我的数据包含以毫秒为单位的时间范围(start_time
和 end_time
)。我正在寻找一种根据时间间隔将行包含到多个存储桶中的方法。
这是我现在所处位置的一个例子。我每行都有开始和结束桶:
start_time | end_time | start_bucket | end_bucket
------------+----------------+--------------+------------
0 | 492 | 1 | 1
404 | 580 | 1 | 1
0 | 628 | 1 | 1
560 | 740 | 1 | 2
644 | 720 | 1 | 2
24 | 160 | 1 | 1
0 | 88 | 1 | 1
640 | 1268 | 1 | 2
556 | 716 | 1 | 1
0 | 2086 | 1 | 3
我正在寻找聚合结果:
bucket | count
------------+---------------
1 | 10
2 | 4
3 | 1
如果我只考虑start_time
或end_time
单独,我就知道如何实现结果。有没有办法将我现在所拥有的汇总为所需的结果?
最佳答案
使用generate_series()
:
select gs.bucket, count(*)
from t cross join lateral
generate_series(t.start_bucket, t.end_bucket) as gs(bucket)
group by gs.bucket
order by 1;
关于sql - 将间隔划分并聚合到桶中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53229593/