多个数组聚合为一维数组,求PC。业务背景见:
《PostgreSQL APP海量FEED LOG实时质量统计CASE(含percentile_disc)》
由于PostgreSQL内置的聚合函数array_agg支持的数组聚合实际上是将多个数组聚合为多维数组。并不是一维数组。
postgres=# select array_agg(arr) from (values(array[1,2,3]), (array[4,5,6])) t(arr);
array_agg
{{1,2,3},{4,5,6}}
(1 row)
而实际上我们要的是一维数组的结果
{1,2,3,4,5,6}
此时需要自定义一个聚合函数
create aggregate arragg (anyarray) (sfunc = array_cat, stype=anyarray, PARALLEL=safe);
postgres=# select arragg(arr) from (values(array[1,2,3]), (array[4,5,6])) t(arr);
arragg
{1,2,3,4,5,6}
(1 row)
但是这个新加的聚合用到了array_cat,大量的memcpy导致性能并不好。
array_agg性能对比arragg
聚合100万个元素.http://click.aliyun.com/m/1000005546/
-
6156
-
HelloWorld开发者社区
PostgreSQL
-
3.3w
-
程序员Better
JavaScript
-
1.3w
-
jimmy_fx
TypeScript
JavaScript
-
17.3w
-
さようなら不想说话49459