Масиви й серіїстандарт SQL

UNNEST

Розгортає масив у рядки — по рядку на кожен елемент.

Синтаксис

UNNEST(<масив>)
UNNEST(<масив>) WITH ORDINALITY

Протилежність ARRAY_AGG: з одного значення-масиву робить стільки рядків, скільки в ньому елементів. Зручно, коли список зберігається в одному полі, як-от теги, а працювати з ним треба як з таблицею: фільтрувати, групувати, з'єднувати.

Масив — у рядки
SELECT UNNEST(ARRAY['Emma', 'Liam', 'Olivia']) AS name;
name
Emma
Liam
Olivia
Теги з рядка — окремими рядками
SELECT UNNEST(STRING_TO_ARRAY('sql,postgres,database', ',')) AS tag;
tag
sql
postgres
database
Разом із номером елементаСкладніше
SELECT tag, position
FROM UNNEST(ARRAY['sql', 'postgres', 'database']) WITH ORDINALITY AS t(tag, position);
tagposition
sql1
postgres2
database3

WITH ORDINALITY додає стовпець із номером елемента, а t(tag, position) дає стовпцям імена.

Зверни увагу

Порожній масив чи NULL дає нуль рядків. Якщо UNNEST стоїть у SELECT поряд з іншими стовпцями, такий рядок таблиці зникне з результату зовсім.

Два UNNEST різної довжини в одному SELECT вирівнюються за довшим, а бракуючі елементи стають NULL.

Порядок рядків без ORDER BY не гарантований. Потрібен номер елемента — додай WITH ORDINALITY.