Dieses ein Postgres ist seit einigen Versionen integriert, sodass Sie nicht mehr Ihre eigenen definieren müssen, der Name ist 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}
(dies ist postgres 8.4.8).
Beachten Sie, dass ORDER BY nicht angegeben ist, daher hängt die Reihenfolge der Ergebniszeilen von der verwendeten Gruppierungsmethode (hier Hash) ab, dh sie ist nicht definiert. Beispiel:
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}
Nun, ich weiß nicht, warum Sie {10,2,4,6,8} erhalten und {9,7,3,1,5}, da generate_series() sollte die schicken Reihen in der Reihenfolge.
Siehe hier: http://stackoverflow.com/questions/43870/how-to-concatenate-strings-of-a-string-field-in-a-postgresql-group-by-query – Quassnoi