我目前有一个问题,我希望将多个列合并到一个构建数组中。此外,我想通过另一列进行分组,以便为数组添加第二个维度。
目前的情况如下:
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聚合一列来将条目放入数组中,但我没有让这种情况起作用。
答案 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;