2010-05-31 51 views
1

我是PostgreSQL数组的新手。PotgreSQL二维数组到行

我试图写一个程序转换阵列 - 到 - 行, 并希望以下的输出:

 
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}} 

...我已经寻找阵列到行的功能,但他们都似乎接受一维数组。 但在这种情况下,它是二维数组。

任何指针将不胜感激。

非常感谢。

回答

0

我想创建一个表,3个字段:

CREATE TABLE矩阵( ROW CHAR, COL INT, VALUE )

,并与你的矩阵 填补它,那么你可以使用查询它:

SELECT ROW,SUM(VALUE)FROM matrix GROUP BY COLUMN ORDER BY ROW;

或类似的。

这将正常工作,如果所述基质是合理的大小的(如不十亿元件)

1
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[][]); 
0
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[][]);