使用sql转换2d数组

wkftcu5l  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(468)

考虑一下sql中的这个表定义

CREATE TABLE matrices (
matrix text[][] NOT NULL
);

假设这个表中的每个矩阵都有相同的维数,如何编写一个查询来转置它们?
例如:

INSERT INTO matrices VALUES
(array[['1','2','3'],
       ['4','5','6']]),
(array[['f','e','d'],
       ['c','b','a']]);

在换位之后,它应该看起来像:

{{1,4},{2,5},{3,6}}
 {{f,c},{e,b},{d,a}}
i5desfxk

i5desfxk1#

选项使用 generate_subscripts() 枚举数组每个维度的索引,然后进行两级聚合。
我们需要一个主键列来正确地重建每个数组-我假设 id (如果您没有这样的列,我们可以使用 row_number() ):

select id, array_agg(ar order by j) new_matrix
from (
    select m.id, j, array_agg(matrix[i][j] order by i) ar
    from matrices m
    cross join lateral generate_subscripts(m.matrix, 1) as s1(i)
    cross join lateral generate_subscripts(m.matrix, 2) as s2(j)
    group by m.id, j
) t
group by id

db小提琴演示
样本数据:

id | matrix           
-: | :----------------
 1 | {{1,2,3},{4,5,6}}
 2 | {{f,e,d},{c,b,a}}

结果:

id | new_matrix         
-: | :------------------
 1 | {{1,4},{2,5},{3,6}}
 2 | {{f,c},{e,b},{d,a}}

相关问题