Este es un Postgres incorporado desde algunas versiones, por lo que ya no necesita definir el suyo propio, el nombre es 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}
(esto es Postgres 8.4.8).
Tenga en cuenta que no ORDER BY
se especifica, por lo que el orden de las filas de resultados depende del método de agrupación utilizado (aquí, hash), es decir, no está definido. Ejemplo:
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}
Ahora, no sé por qué obtienes {10,2,4,6,8}
y {9,7,3,1,5}
, ya que generate_series()
debe enviar las filas en orden.