En möjlighet är att först gruppera efter x
och använd array_agg()
för att få de inre arrayerna. Aggregera sedan igen med array_agg()
för att få de inre arrayerna till en yttre array.
SELECT array_agg(a ORDER BY x)
FROM (SELECT x,
array_agg(val ORDER BY y) a
FROM t1
GROUP BY x) t;