PostgreSQL:将列和行合并到数组中

时间:2016-11-20 20:19:14

标签: arrays postgresql

我目前有一个问题,我希望将多个列合并到一个构建数组中。此外,我想通过另一列进行分组,以便为​​数组添加第二个维度。

目前的情况如下:

function            X        Y       Z
A                   1        4       {7,9,...}
A                   2        6       {8,3,...}
A                   4        4       {6,1,...}
A                   3        2       {1,0,...}
B                   1        2       {1,1,...}

将X,Y和Z列合并为一列后:

function            XYZ
A                   {1,4,7,9,...}
A                   {2,6,8,3,...}
A                   {4,4,6,1,...}
A                   {3,2,1,0,...}
B                   {1,2,1,1,...}

我想按列功能分组并构建一个二维数组作为结果。数组中的条目应按X列排序。

function            XYZ
A                   {{1,4,7,9,...},{2,6,8,3,...},{3,2,1,0,...},{4,4,6,1,...}}                
B                   {{1,2,1,1,...}}

我知道,我可以使用array_agg聚合一列来将条目放入数组中,但我没有让这种情况起作用。

1 个答案:

答案 0 :(得分:1)

如果我理解正确

CREATE TABLE f (fn text,x int,y int,z int[] );
INSERT INTO f(fn, x, y, z) values ('A',1,4,ARRAY[7,8,9]);
INSERT INTO f(fn, x, y, z) values ('A',2,6,ARRAY[7,8,9]);
INSERT INTO f(fn, x, y, z) values ('A',4,4,ARRAY[7,8,9]);
INSERT INTO f(fn, x, y, z) values ('B',1,4,ARRAY[7,8,9]);
INSERT INTO f(fn, x, y, z) values ('A',9,4,ARRAY[7,8,9]);
INSERT INTO f(fn, x, y, z) values ('A',5,4,ARRAY[7,8,9]);

SELECT fn,ARRAY_AGG(v) FROM 
(SELECT fn,ARRAY[x]||ARRAY[y]||z as v from f ORDER BY x) x GROUP BY fn;