将各种长度的1D阵列聚合成2D阵列

时间:2016-06-02 15:46:46

标签: postgresql-9.5

我有4个子查询返回0 +长度为1 +的SMALLINT []行。

我想将所有子查询结果聚合成一行SMALLINT [] []。

由于阵列的长度不同,我不确定如何将它们卷起来?使用9.5 ARRAY_AGG返回"无法累积不同维度的数组"。

1 个答案:

答案 0 :(得分:2)

您可以使用array填充NULL

CREATE TABLE tab(col smallint[]);

INSERT INTO tab(col) 
VALUES ('{1}'), ('{1,2}'), ('{1,2,3}'), ('{}');

SELECT array_agg(
          array_cat(
            col,
            array_fill(NULL::smallint, ARRAY[l-COALESCE(array_length(col, 1),0)])
          )
       ) AS result
FROM tab;
,LATERAL (SELECT MAX(array_length(col,1)) AS l
          FROM tab) s

输出:

╔═════════════════════════════════════════════════════╗
║                       result                        ║
╠═════════════════════════════════════════════════════╣
║ {{1,NULL,NULL},{1,2,NULL},{1,2,3},{NULL,NULL,NULL}} ║
╚═════════════════════════════════════════════════════╝