我是PostgreSQL数组的新手。
我正在尝试编写一个将数组转换为行的过程, 并希望关注输出:
alphabet | number ---------+---------- A | 10 B | 10 C | 6 D | 9 E | 3 from following: id | alphabet_series -------+-------------------------------------------------------------------------------------------------- 1 | {{A,10},{B,10},{C,6},{D,9},{E,3},{F,9},{I,10},{J,17},{K,16},{L,17},{M,20},{N,13},{O,19}}
我已经搜索了数组到行的函数,但它们似乎都接受了1-d数组。 但在这种情况下,它是2-d数组。
任何指针都将受到赞赏。
非常感谢。
答案 0 :(得分:2)
CREATE TABLE two_d (x text, y text);
CREATE OR REPLACE FUNCTION unnest_2d(anyarray)
RETURNS SETOF two_d AS
$BODY$
SELECT $1[i][1], $1[i][2] FROM
generate_series(array_lower($1,1),
array_upper($1,1)) i
$BODY$
LANGUAGE 'sql' IMMUTABLE;
SELECT * FROM unnest_2d('{{A,a},{B,b}}'::text[][]);
答案 1 :(得分:1)
CREATE OR REPLACE FUNCTION unnest_2d(anyarray)
RETURNS table(col1 text, col2 text) AS
$BODY$
DECLARE
_col1 text[];
_col2 text[];
BEGIN
_col1 := $1[1:array_length($1, 1)][1:1];
_col2 := $1[1:array_length($1, 1)][2:2];
return query (SELECT * FROM unnest(_col1,_col2));
END
$BODY$ LANGUAGE plpgsql IMMUTABLE;
SELECT * FROM unnest_2d('{{A,a},{B,b}}'::text[][]);
答案 2 :(得分:0)
我会创建一个包含3个字段的表:
CREATE TABLE矩阵( ROW CHAR, COL INT, 值 )
并用你的矩阵填充它 然后你可以使用:
查询它SELECT ROW,SUM(VALUE)FROM矩阵GROUP BY COLUMN ORDER BY ROW;
或类似。
如果矩阵的大小合适(不是数十亿个元素),这将正常工作