2010-05-31 50 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[][]);