Jedną z możliwości jest pierwsze grupowanie według x
i użyj array_agg()
aby uzyskać wewnętrzne tablice. Następnie zagreguj ponownie za pomocą array_agg()
aby umieścić wewnętrzne tablice w jednej zewnętrznej tablicy.
SELECT array_agg(a ORDER BY x)
FROM (SELECT x,
array_agg(val ORDER BY y) a
FROM t1
GROUP BY x) t;