PostgreSQL array_agg(INTEGER [])

问题描述:

使用Postgres 9.5,我想concontern从GROUP BY整数数组。从文档似乎array_agg应该能够做到这一点,但我得到:ERROR: cannot accumulate arrays of different dimensionalityPostgreSQL array_agg(INTEGER [])

在我的测试集上使用array_dims我得到[1:18],[1:24]和[1:48]。我将其看作3个不同长度的1维数组。结果应该是维数为[1-90]的单个数组我在这里错过了什么?

+0

IIRC ARRAY_AGG用于分组的值连接成一个单一的阵列,而不是来连接阵列。 – Magisch

+0

array_agg将行聚集到数组中 - 例如'select array_agg(oid)from pg_database' –

+0

array_agg试图做这个'array [array [1:18],array [1:24],array [1:48]]'并且这不是有效的多维数组。你需要编写你自己的聚合,而不是连接数组。 –

继续在评论中讨论,我个人的建议是创建聚合。

CREATE AGGREGATE array_concat_agg(anyarray) (
    SFUNC = array_cat, 
    STYPE = anyarray 
); 

然后就可以做到这一点:

SELECT column1 
    FROM (VALUES (array[1,2,3]), (array[3,4]), (array[53,43,33,22])) arr; 
    column1 
--------------- 
{1,2,3} 
{3,4} 
{53,43,33,22} 
(3 rows) 

SELECT array_concat_agg(column1) 
    FROM (VALUES (array[1,2,3]), (array[3,4]), (array[53,43,33,22])) arr; 
    array_concat_agg 
------------------------- 
{1,2,3,3,4,53,43,33,22} 
(1 row) 
+0

谢谢。这很简单,我想知道为什么这不是一个标准函数。 – Derek