sql - 将间隔划分并聚合到桶中

标签 sql database postgresql

我成功使用 PostgreSQL width_bucket(val, min, max, buckets) 函数将我的数据集划分为大小相等的存储桶。但我的数据包含以毫秒为单位的时间范围(start_timeend_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_timeend_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/

相关文章:

sql - 使用动态查询字符串连接多个表

postgresql - docker 中的 Keycloak 服务器无法以独立模式启动?

python - row_to_json 和 psycopg2.fetchall() 结果是列表中的列表而不是列表中的字典

postgresql - 您能否将 Workspace Security 添加到现有的 Magnolia 工作区?

带有列和行总计的 SQL 数据透视表

sql - Azure Synapse 中的管道不断失败(运行简单的查询)

mysql - 仅在一列的 Left Join 上选择 distinct

mysql - 插入另一个表时更改一个表

database - Django:级联 on_delete 选项不起作用

string - 在Elasticsearch中对关键字查询的句子