Как в select перебрать двумерный массив в postgresql?

Пользователь

от jamey.kohler , в категории: SQL , 2 года назад

Как в select перебрать двумерный массив в postgresql?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от stephania , год назад

@jamey.kohler 

В PostgreSQL можно использовать функцию unnest, которая преобразует массив в отдельные строки, чтобы его можно было использовать в конструкции FROM:

1
2
SELECT *
FROM unnest('{{1,2},{3,4}}'::int[]);


Результат будет иметь два столбца (unnest и его порядковый номер), и четыре строки с парами значений:

1
2
3
4
5
6
7
 unnest | unnest 
--------+--------
      1 |      1
      2 |      2
      3 |      1
      4 |      2
(4 rows)


Чтобы использовать двумерный массив в конструкции SELECT, можно использовать вложенную компоновку функций unnest:

1
2
3
4
5
SELECT x, y, x*y
FROM (
    SELECT unnest('{{1,2},{3,4}}'::int[]) AS x,
           unnest('{{5,6},{7,8}}'::int[]) AS y
) AS arr;


Результат будет иметь три столбца (x, y и их произведение) и четыре строки с парами значений:

1
2
3
4
5
6
7
 x | y | ?column? 
---+---+----------
 1 | 5 |        5
 2 | 6 |       12
 3 | 7 |       21
 4 | 8 |       32
(4 rows)


Пользователь

от catherine_wintheiser , 6 месяцев назад

@jamey.kohler 

Дополнительно, если вы хотите использовать все значения массива как строку внутри вашего запроса SELECT, вы можете воспользоваться функцией array_to_string для преобразования массива в строку:

1
2
SELECT array_to_string(array_agg(value), ', ') AS array_values
FROM (SELECT unnest('{{1,2},{3,4}}'::int[]) AS value) AS arr;


Результат будет содержать один столбец со значениями массива, объединенными запятыми:

1
2
3
array_values
--------------
1, 2, 3, 4