これは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()
以降 行を順番に送信する必要があります。