不能使用array_agg()
產生多維數組,至少達不到的PostgreSQL 9.4。
(但即將到來的的Postgres 9.5艘new variant of array_agg()
可以!)
什麼你走出@Matt Ball's query是一組記錄(the_table[]
)。
數組只能容納相同基本類型的元素。你顯然有數字和字符串類型。將所有列(尚未)轉換爲text
以使其工作。
您可以爲此創建一個聚合函數,就像我之前向您演示的here一樣。
CREATE AGGREGATE array_agg_mult (anyarray) (
SFUNC = array_cat
,STYPE = anyarray
,INITCOND = '{}'
);
呼叫:
SELECT array_agg_mult(ARRAY[ARRAY[name, id::text, url]]) AS tbl_mult_arr
FROM tbl;
注意附加ARRAY[]
層,使之成爲多維數組(2- dimenstional,要準確)。
即時演示:
WITH tbl(id, txt) AS (
VALUES
(1::int, 'foo'::text)
,(2, 'bar')
,(3, '}b",') -- txt has meta-characters
)
, x AS (
SELECT array_agg_mult(ARRAY[ARRAY[id::text,txt]]) AS t
FROM tbl
)
SELECT *, t[1][3] AS arr_element_1_1, t[3][4] AS arr_element_3_2
FROM x;
令人驚歎!非常感謝! – 2012-08-01 16:15:33
以及我的朋友,你是所謂的「deus ex machina」! – kostia 2014-03-23 09:55:06