Една от възможностите е първо да се групира по x
и използвайте array_agg()
за да получите вътрешните масиви. След това агрегирайте отново с помощта на array_agg()
за да съберете вътрешните масиви в един външен масив.
SELECT array_agg(a ORDER BY x)
FROM (SELECT x,
array_agg(val ORDER BY y) a
FROM t1
GROUP BY x) t;