Một khả năng là nhóm đầu tiên theo x và sử dụng array_agg() để lấy các mảng bên trong. Sau đó, tổng hợp lại bằng cách sử dụng array_agg() để chuyển các mảng bên trong thành một mảng bên ngoài.
SELECT array_agg(a ORDER BY x)
FROM (SELECT x,
array_agg(val ORDER BY y) a
FROM t1
GROUP BY x) t;