Dit is een Postgres ingebouwd sinds een paar versies, dus u hoeft niet langer uw eigen te definiëren, de naam is array_agg()
.
test=> select array_agg(n) from generate_series(1,10) n group by n%2;
array_agg
--------------
{1,3,5,7,9}
{2,4,6,8,10}
(dit is Postgres 8.4.8).
Merk op dat geen ORDER BY
is gespecificeerd, dus de volgorde van de resultaatrijen hangt af van de gebruikte groeperingsmethode (hier hash), dwz het is niet gedefinieerd. Voorbeeld:
test=> select n%2, array_agg(n) from generate_series(1,10) n group by (n%2);
?column? | array_agg
----------+--------------
1 | {1,3,5,7,9}
0 | {2,4,6,8,10}
test=> select (n%2)::TEXT, array_agg(n) from generate_series(1,10) n group by (n%2)::TEXT;
text | array_agg
------+--------------
0 | {2,4,6,8,10}
1 | {1,3,5,7,9}
Nu weet ik niet waarom je {10,2,4,6,8}
. krijgt en {9,7,3,1,5}
, sinds generate_series()
zou de rijen in volgorde moeten verzenden.