Това е вграден Postgres от няколко версии, така че вече не е необходимо да дефинирате своя собствена, името е 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}
(това е Postgres 8.4.8).
Обърнете внимание, че няма ORDER BY
е посочено, така че редът на редовете с резултати зависи от използвания метод за групиране (тук хеш), т.е. не е дефиниран. Пример:
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}
Сега не знам защо получавате {10,2,4,6,8}
и {9,7,3,1,5}
, тъй като generate_series()
трябва да изпрати редовете в ред.