Arrays y seriesestándar SQL

UNNEST

Despliega un array en filas: una fila por elemento.

Sintaxis

UNNEST(<array>)
UNNEST(<array>) WITH ORDINALITY

Lo contrario de ARRAY_AGG: a partir de un único valor de tipo array crea tantas filas como elementos tiene. Útil cuando una lista se guarda en un solo campo, como las etiquetas, pero hay que trabajar con ella como con una tabla: filtrar, agrupar, unir.

Un array convertido en filas
SELECT UNNEST(ARRAY['Emma', 'Liam', 'Olivia']) AS name;
name
Emma
Liam
Olivia
Etiquetas de una cadena como filas separadas
SELECT UNNEST(STRING_TO_ARRAY('sql,postgres,database', ',')) AS tag;
tag
sql
postgres
database
Junto con el número del elementoAvanzado
SELECT tag, position
FROM UNNEST(ARRAY['sql', 'postgres', 'database']) WITH ORDINALITY AS t(tag, position);
tagposition
sql1
postgres2
database3

WITH ORDINALITY añade una columna con el número del elemento, y t(tag, position) da nombre a las columnas.

Ten en cuenta

Un array vacío o NULL da cero filas. Si UNNEST está en SELECT junto a otras columnas, esa fila de la tabla desaparece del resultado por completo.

Dos UNNEST de distinta longitud en el mismo SELECT se alinean según el más largo, y los elementos que faltan pasan a ser NULL.

Sin ORDER BY, el orden de las filas no está garantizado. Si necesitas el número del elemento, añade WITH ORDINALITY.