PostgreSQL CONJUNTOS DE AGRUPACIÓN

author
3 minutes, 25 seconds Read

Resumen: en este tutorial, aprenderá sobre el concepto de conjunto de agrupación y cómo utilizar la cláusula GROUPING SETS de PostgreSQL para generar múltiples conjuntos de agrupación en una consulta.

Crear una tabla de ejemplo

Comencemos creando una nueva tabla llamadasales para la demostración.

Code language: SQL (Structured Query Language) (sql)

La tabla salesalmacena el número de productos vendidos por marca y segmento.

Introducción a PostgreSQL CONJUNTOS DE AGRUPACIÓN

Un conjunto de agrupación es un conjunto de columnas por el que se agrupa utilizando la cláusula GROUP BY.

Un conjunto de agrupación se denota mediante una lista de columnas separada por comas colocada dentro de paréntesis:

Por ejemplo, la siguiente consulta utiliza la cláusula GROUP BY para devolver el número de productos vendidos por marca y segmento. En otras palabras, define un conjunto de agrupación de la marca y el segmento que se denota por (brand, segement)

Code language: SQL (Structured Query Language) (sql)

La siguiente consulta encuentra el número de productos vendidos por una marca. Define un conjunto de agrupación (brand):

Code language: SQL (Structured Query Language) (sql)

La siguiente consulta busca el número de productos vendidos por segmento. Define un conjunto de agrupación (segment):

Code language: SQL (Structured Query Language) (sql)

La siguiente consulta encuentra el número de productos vendidos para todas las marcas y segmentos. Define un conjunto de agrupación vacío que se indica con ().

Code language: SQL (Structured Query Language) (sql)

Supongamos que se desea obtener todos los conjuntos de agrupación mediante una única consulta. Para conseguirlo, puede utilizar el UNION ALL para combinar todas las consultas anteriores.

Debido a que el UNION ALL requiere que todos los conjuntos de resultados tengan el mismo número de columnas con tipos de datos compatibles, debe ajustar las consultas añadiendo NULL a la lista de selección de cada una de ellas, como se muestra a continuación:

Code language: SQL (Structured Query Language) (sql)

Esta consulta generó un único conjunto de resultados con los agregados de todos los conjuntos de agrupación.

Aunque la consulta anterior funciona como se esperaba, tiene dos problemas principales.

  • Primero, es bastante larga.
  • Segundo, tiene un problema de rendimiento porque PostgreSQL tiene que escanear la tabla sales por separado para cada consulta.

Para hacerlo más eficiente, PostgreSQL proporciona la cláusula GROUPING SETS que es la subcláusula de la cláusula GROUP BY.

La GROUPING SETS permite definir múltiples conjuntos de agrupación en la misma consulta.

La sintaxis general de la GROUPING SETS es la siguiente:

Code language: SQL (Structured Query Language) (sql)

En esta sintaxis, tenemos cuatro conjuntos de agrupación (c1,c2), (c1), (c2) y ().

Para aplicar esta sintaxis al ejemplo anterior, puede utilizar la cláusula GROUPING SETS en lugar de la cláusula UNION ALL así:

Code language: SQL (Structured Query Language) (sql)

Esta consulta es mucho más corta y legible. Además, PostgreSQL optimizará el número de veces que escanea la tabla sales y no escaneará varias veces.

Función de agrupación

La función GROUPING() acepta un argumento que puede ser un nombre de columna o una expresión:

El column_name o expression debe coincidir con el especificado en la cláusula GROUP BY.

La función GROUPING() devuelve el bit 0 si el argumento es un miembro del conjunto de agrupación actual y 1 en caso contrario.

Vea el siguiente ejemplo:

Code language: SQL (Structured Query Language) (sql)

Como se muestra en la captura de pantalla, cuando el valor en el grouping_brand es 0, la columna sum muestra el subtotal del brand.

Cuando el valor en el grouping_segment es cero, la columna de suma muestra el subtotal del segment.

Puede utilizar la función GROUPING() en la cláusula HAVING para encontrar el subtotal de cada marca así:

En este tutorial, ha aprendido a utilizar el GROUPING SETS de PostgreSQL para generar múltiples conjuntos de agrupación.

  • ¿Ha sido útil este tutorial?
  • SíNo

Similar Posts

Deja una respuesta

Tu dirección de correo electrónico no será publicada.