PostgreSQL 2D数组到行

时间:2010-05-31 07:57:18

标签: postgresql

我是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数组。

任何指针都将受到赞赏。

非常感谢。

3 个答案:

答案 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;

或类似。

如果矩阵的大小合适(不是数十亿个元素),这将正常工作