Вы можете сначала разбить элементы на строки и агрегат обратно:
select code, array_agg(value) as values
from (
select split_part(item, '.', 1) as code,
split_part(item, '.', 2) as value
from the_table t
cross join regexp_split_to_table(t.input_column, '\s*,\s*') as x(item)
) t
group by code
order by code
Я использовал regexp_split_to_table()
для генерации строк, а не string_to_array()
и unnest()
, поэтому разбирайтесь с пробелами после запятая. При комбинации unnest()
и string_to_array()
для этого потребуется дополнительный trim()
, что затруднит чтение внутреннего запроса.
Пример в сети