CodeGym /Cursos /SQL SELF /Extrayendo datos de un array: unnest(),

Extrayendo datos de un array: unnest(), array_length(), array_position()

SQL SELF
Nivel 35 , Lección 2
Disponible

Trabajar con arrays no se limita solo a crearlos y guardarlos — muchas veces necesitas sacar elementos individuales o analizar su contenido. PostgreSQL trae varias funciones integradas para estas operaciones. Vamos a verlas una por una.

Función unnest(): desempaquetando un array

La función unnest() literalmente desempaqueta un array, convirtiendo sus elementos en filas separadas. Esto es súper útil si necesitas trabajar con los datos del array como si fueran una tabla.

Ejemplo 1: Desempaquetando un array simple

Supón que tienes un array con nombres de facultades:

SELECT ARRAY['Informática', 'Matemáticas', 'Física'] AS facultades;

Ahora queremos sacar cada elemento como una fila aparte. Usamos unnest():

SELECT unnest(ARRAY['Informática', 'Matemáticas', 'Física']) AS facultad;

Resultado:

facultad
Informática
Matemáticas
Física

Ejemplo 2: Desempaquetando un array en una tabla

Supón que tienes una tabla courses:

CREATE TABLE courses (
    course_id SERIAL PRIMARY KEY,
    course_name TEXT,
    tags TEXT[]
);

INSERT INTO courses (course_name, tags)
VALUES
    ('Algoritmos', ARRAY['Programación', 'Informática']),
    ('Álgebra lineal', ARRAY['Matemáticas', 'Álgebra']),
    ('Física básica', ARRAY['Física', 'General']);

Ahora sacamos todos los tags del array:

SELECT course_name, unnest(tags) AS tag
FROM courses;

Resultado:

course_name tag
Algoritmos Programación
Algoritmos Informática
Álgebra lineal Matemáticas
Álgebra lineal Álgebra
Física básica Física
Física básica General

Como ves, cada elemento del array se convierte en una fila de la tabla.

Función array_length(): saber el tamaño de un array

Otra función clave para arrays es array_length(). Devuelve la longitud del array (o sea, cuántos elementos tiene) para la dimensión que le digas.

Ejemplo 1: Número de elementos en un array unidimensional

Tomemos un array:

SELECT ARRAY['Manzana', 'Plátano', 'Naranja'] AS frutas;

Si quieres saber cuántas frutas hay en el array:

SELECT array_length(ARRAY['Manzana', 'Plátano', 'Naranja'], 1) AS longitud;

Resultado:

longitud
3

Aquí el 1 indica la dimensión del array. Los arrays en PostgreSQL pueden tener varias dimensiones (por ejemplo, arrays bidimensionales), pero eso lo dejamos para otro momento.

Ejemplo 2: Número de elementos en un array de una tabla

Veamos cuántos tags tiene cada curso:

SELECT course_name, array_length(tags, 1) AS cantidad_tags
FROM courses;

Resultado:

course_name cantidad_tags
Algoritmos 2
Álgebra lineal 2
Física básica 2

La función simplemente te dice: “¡Oye, aquí hay dos elementos!”, y eso ya te facilita mucho el análisis de datos.

Función array_position(): buscar un valor en un array

Ahora imagina que buscas un elemento concreto en un array. La función array_position() te salva: devuelve la posición de la primera vez que aparece ese elemento.

Ejemplo 1: Buscar un elemento

Supón que tienes este array:

SELECT ARRAY['Rojo', 'Azul', 'Verde', 'Amarillo'] AS colores;

Vamos a buscar la posición del elemento "Azul":

SELECT array_position(ARRAY['Rojo', 'Azul', 'Verde', 'Amarillo'], 'Azul') AS posicion;

Resultado:

posicion
2

Si el elemento no está, la función devuelve NULL. Vamos a probarlo:

SELECT array_position(ARRAY['Rojo', 'Azul', 'Verde', 'Amarillo'], 'Negro') AS posicion;

Resultado:

posicion
NULL

Ejemplo 2: Buscar en un array de una tabla

Quieres saber qué curso tiene el tag "Informática". Primero buscamos las filas necesarias:

SELECT course_name, array_position(tags, 'Informática') AS posicion
FROM courses;

Resultado:

course_name posicion
Algoritmos 2
Álgebra lineal NULL
Física básica NULL

Ahora añade un filtro para dejar solo las filas donde el tag existe:

SELECT course_name
FROM courses
WHERE array_position(tags, 'Informática') IS NOT NULL;

Resultado:

course_name
Algoritmos

La función array_position() te permite encontrar datos dentro de un array rápido, por eso es una de las más importantes para trabajar con arrays en PostgreSQL.

Aplicaciones prácticas de las funciones

  • unnest() — úsala para convertir arrays en filas. Es clave para analizar datos, hacer informes y trabajar con tags.
  • array_length() — ideal para comprobar la longitud de los arrays. Por ejemplo, puedes usarla para validar datos: asegurarte de que el array no esté vacío.
  • array_position() — una herramienta genial para buscar elementos, ya sean categorías de productos, participación de estudiantes en proyectos o palabras clave en descripciones.

Errores típicos al usar estas funciones

  1. unnest() puede duplicar el número de filas si la usas en arrays de varias columnas a la vez. Esto se arregla fácil con JOIN LATERAL o CROSS JOIN, pero ojo con eso.
  2. array_length() devuelve NULL para un array vacío. Si tu array puede estar vacío, compruébalo aparte.
  3. array_position() puede devolver NULL si el elemento no está. Así que mejor siempre tenlo en cuenta en los filtros (IS NOT NULL).

Ejemplos de la vida real

Los arrays en PostgreSQL no son solo teoría, son una herramienta que va de lujo en proyectos reales. Por ejemplo, si tienes un blog y cada artículo tiene una lista de tags — el array te deja filtrar artículos por tema o incluso hacer un top de categorías populares.

O imagina que analizas el comportamiento de usuarios que eligen varios cursos o productos. Todas esas preferencias se guardan fácil en un array — y también se procesan fácil.

Y además los arrays ayudan a validar datos: con array_length() puedes, por ejemplo, limitar el número de elementos — para que un usuario no elija más de cinco opciones.

2
Tarea
SQL SELF, nivel 35, lección 2
Bloqueada
Desempaquetar un array con `unnest()`
Desempaquetar un array con `unnest()`
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION