Đây là một Postgres được tích hợp sẵn từ một vài phiên bản nên bạn không cần phải xác định riêng của mình nữa, tên là 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}
(đây là Postgres 8.4.8).
Lưu ý rằng không có ORDER BY
được chỉ định, vì vậy thứ tự của các hàng kết quả phụ thuộc vào phương pháp nhóm được sử dụng (ở đây là băm), tức là nó không được xác định. Ví dụ:
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}
Bây giờ, tôi không biết tại sao bạn nhận được {10,2,4,6,8}
và {9,7,3,1,5}
, vì generate_series()
nên gửi các hàng theo thứ tự.