Изменить массив в Postgres? - PullRequest
       9

Изменить массив в Postgres?

1 голос
/ 06 февраля 2020

У меня есть одномерный массив значений в Postgres, например:

[ "1", "4", "2", "5", "3", "6" ]

Есть ли способ изменить это на двумерный массив?

[ ["1", "4"], ["2", "5"], ["3", "6"] ]

Теперь размеры 3х2 вместо 1х6.

1 Ответ

1 голос
/ 06 февраля 2020

Используйте два агрегата:

select array_agg(arr order by ord)
from (
    select (ord+ 1) / 2 as ord, array_agg(arr) as arr
    from unnest(array[1,4,2,5,3,6]) with ordinality as u(arr, ord)
    group by 1
    ) s

или конструктор массива:

select array(
    select array_agg(unnest)
    from unnest(array[1,4,2,5,3,6]) with ordinality
    group by (ordinality+ 1) / 2
    order by (ordinality+ 1) / 2
    )

Db <> fiddle.

...