通过合并聚合范围

Vic*_*tor 5 postgresql aggregate range-types

目前还没有任何集合函数范围类型PostgreSQL中。

如何使用合并操作聚合范围?

此解决方案有效,但看起来并不理想:

CREATE TEMPORARY TABLE test_ranges (r int4range);
INSERT INTO test_ranges VALUES ('[4, 8)'), ('[12, 45)'), (NULL);

SELECT int4range(min(lower(r)), max(upper(r))) FROM test_ranges;
=> '[4,45)'
Run Code Online (Sandbox Code Playgroud)

Vic*_*tor 8

使用该range_merge(anyrange, anyrange)函数创建聚合

CREATE AGGREGATE range_merge(anyrange)
(
  sfunc = range_merge,
  stype = anyrange
);

SELECT range_merge(r) FROM test_ranges;
=> '[4,45)'
Run Code Online (Sandbox Code Playgroud)