Desanidar en PostgreSQL

Bilal Shahid 15 febrero 2024
  1. PostgreSQL unnest () Funcionalidad
  2. Uso de PostgreSQL unnest()
Desanidar en PostgreSQL

En este artículo, describiremos la palabra clave unnest() y sus usos en PostgreSQL con múltiples ejemplos.

PostgreSQL unnest () Funcionalidad

En PostgreSQL, puede usar una matriz como tipo de datos. También hay múltiples funciones relacionadas con la mejora de la usabilidad de las matrices en el lenguaje.

La función unnest() es una de esas muchas funcionalidades de matriz que explicaremos hoy. Sin embargo, la funcionalidad básica es bastante clara a partir de la palabra unnest() en sí misma: expande las matrices en filas.

Es esencial cuando se intenta mostrar las matrices en forma tabular. PostgreSQL permite que esta funcionalidad expanda matrices en un conjunto de valores singulares que podemos representar en forma tabular como filas.

En versiones anteriores de PostgreSQL, había métodos más lentos y complicados para lograr una expansión de arreglos que fueron reemplazados por esta funcionalidad unnest() que también podemos usar con otras funcionalidades de PostgreSQL.

Usarlo con otras funcionalidades de PostgreSQL permite amplias posibilidades para operaciones más fáciles y rápidas.

Uso de PostgreSQL unnest()

Comenzaremos con la funcionalidad básica y luego avanzaremos lentamente hacia casos de uso más complicados. La sintaxis es unnest(matriz).

Simplemente tomará todos los valores individuales de la matriz y los colocará en un conjunto que se muestra en forma de filas en la tabla.

Nota: Debe proporcionar la palabra clave unnest() con una matriz. Por ejemplo: unnest (array_to_expand).

Ahora, pasemos a los ejemplos de cada función esencial.

Uso de la función unnest () de PostgreSQL en una matriz unidimensional simple

Sea una matriz de números naturales hasta 5. La forma sencilla de expandirlos y mostrarlos como filas en una tabla es “desanidarlos”.

SELECT unnest (ARRAY[1,2,3,4,5]);

Proporcionará una salida con todos los 5 dígitos en forma tabular (5 filas):

anular en postresql - salida uno

Ahora, probemos exactamente con palabras en lugar de números para ver si hay algún cambio.

SELECT unnest (ARRAY['apple', 'oranges', 'mango']);

Proporcionará una salida con todas las 3 palabras en forma tabular (3 filas):

anular en postresql - salida dos

Como podemos ver, funciona perfectamente tanto para enteros como para texto.

Use la función unnest () de PostgreSQL en una matriz multidimensional simple

Hemos explicado cómo aplicar la función unnest () en una matriz 1D arriba. El siguiente ejemplo ilustra cómo usarlo en arreglos 2D.

SELECT unnest (array[array[1, 2], array[2, 3], array[4,5]]);

Mostrará un total de 6 filas con todos los 6 dígitos en forma tabular.

anular en postresql - salida tres

Utilice la función unnest () de PostgreSQL en varios arreglos al mismo tiempo

Esta sección demostrará el uso de la función unnest () en múltiples arreglos simultáneamente. Las matrices también pueden ser de diferentes tipos de datos.

Después de usar la función unnest (), cada arreglo aparecerá como una columna en la tabla con los valores de los arreglos como filas.

Podemos escribirlo como unnest (matriz1, matriz2, matriz3…). El siguiente ejemplo ayudará a aclarar el concepto.

SELECT * FROM
unnest
(
    array [1, 2, 3],
    array ['HP', 'AMD', 'APPLE']
)
AS data(ID, Company);

Mostrará una tabla con cada matriz como una columna y valores dentro como filas de esas columnas.

anular en postresql - salida cuatro

Tomemos otro ejemplo donde las dos matrices tienen un número desigual de elementos.

SELECT * FROM
unnest
(
    array [1, 2, 3],
    array ['HP', 'AMD', 'APPLE', 'DELL']
)
AS data(ID, Company);

En este ejemplo, hay una empresa más que las ID. En este caso, el más corto se rellenará con NULLS para compensar, y se mostrará una tabla sin errores.

anular en postresql - salida cinco

Utilice la función unnest () de PostgreSQL con la cláusula ORDER BY

La función unnest () de PostgreSQL también se puede utilizar junto con la cláusula ORDER BY. Iremos ilustrándolo con ejemplos.

Una de las formas de utilizar la cláusula ORDER BY es mediante la ordenación de matrices. El resultado se ordenará en este caso según la segunda columna (Empresa).

SELECT * FROM
unnest
(
    array [1, 2, 3],
    array ['HP', 'AMD', 'APPLE']
)
AS data(ID, Company) ORDER BY 2;

anular en postresql - salida seis

Otra forma de usar la cláusula ORDER BY es asignando a la matriz un nombre usando AS. El resultado se ordenará en este caso según la segunda columna (Ranking).

SELECT * FROM
unnest
(
    array['HP', 'AMD', 'APPLE'],
    array[23,14,1]
)
AS data(Company, Ranking) ORDER BY Ranking;

anular en postresql - salida siete

Utilice la función unnest () de PostgreSQL con la cláusula LIMIT

PostgreSQL le permite usar la función unnest () con la cláusula LIMIT.

En este caso, la tabla resultante (después de la expansión de arreglos) estará limitada a la condición descrita en la cláusula LIMIT. Los siguientes ejemplos aclararán la idea.

SELECT unnest (array[1,2,3,4,5,6])
LIMIT 3;

Mostrará solo los primeros 3 valores de la matriz como filas.

anular en postresql - salida ocho

También puede utilizar el comando OFFSET con LIMIT.

SELECT unnest (array[1,2,3,4,5,6])
LIMIT 3 OFFSET 3;

Omitirá los primeros 3 valores y mostrará solo los últimos 3 valores (4,5,6) como filas en la tabla resultante.

anular en postresql - salida nueve

Use la función unnest () de PostgreSQL con la cláusula DISTINCT

La cláusula DISTINCT se usa en múltiples idiomas de bases de datos para eliminar duplicados.

En PostgreSQL, puede eliminar todos los duplicados de cualquier tipo de datos, ya sea un número entero, una cadena, etc., pero tiene la limitación de que solo puede eliminar duplicados en los datos en forma tabular.

Esta limitación dificulta la eliminación de duplicados de matrices. Sin embargo, la funcionalidad unnest () resuelve este problema rápidamente.

Al usar el comando unnest (), primero podemos convertir los valores de una matriz en forma tabular. Luego, la cláusula DISTINCT se puede aplicar fácilmente para eliminar duplicados.

Esta idea se ilustra en el siguiente ejemplo para su comprensión.

SELECT DISTINCT unnest (array['HP', 'DELL', 'APPLE','AMD', 'HP']);

En este ejemplo, la matriz se convierte primero a formato tabular utilizando unnest (). Luego, se aplica la cláusula DISTINCT para eliminar los duplicados. Como resultado, la tabla resultante tendrá HP solo una vez.

anular en postresql - salida diez

Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub