2015-11-27 74 views
1

我的目標是取一個array,把它放到一個unnest的表中,然後將它聚合回一個與array_agg的數組。爲什麼第一塊DO塊會失敗,第二塊成功?PostgreSQL:`unnest`一個數組,然後`array_agg`回

DO $$ 
DECLARE 
    x numrange[] := '{"[0, 3]", "[0, 1]", "[3, 5]", "[3, 8]"}'; 
BEGIN 

    x := (SELECT array_agg(x) FROM unnest(x)); 
    RAISE NOTICE '%', x; 
END; 
$$; 


DO $$ 
DECLARE 
    x numrange[] := '{"[0, 3]", "[0, 1]", "[3, 5]", "[3, 8]"}'; 
BEGIN 

    x := (SELECT array_agg(y) FROM unnest(x) AS y); 
    RAISE NOTICE '%', x; 
END; 
$$; 
+1

你爲什麼要這樣做?你正試圖解決的**真正**問題是什麼? –

+0

我想通過降低右邊界來對數組中的範圍進行排序。我正在考慮製作一個表,並用upper()或其他東西排序它 – alisianoi

+0

@a_horse_with_no_name這裏是我的評論重鑄成一個問題:http://stackoverflow.com/questions/33954733/postgresql-sort-an-array-of-元件-使用-一些排序條件 – alisianoi

回答

1

在列的第一DO名稱是unnest。你沒有列x

DO $$ 
DECLARE 
    x numrange[] := '{"[0, 3]", "[0, 1]", "[3, 5]", "[3, 8]"}'; 
BEGIN 

    x := (SELECT array_agg(unnest) FROM unnest(x)); 
    RAISE NOTICE '%', x; 
END; 
$$; 

在列第二DO名字是y,您可以在此列做string_agg()

相關問題