SQL Server GROUPING SETS

Resumen: en este tutorial, aprenderá a utilizar el SQL Server GROUPING SETS para generar múltiples conjuntos de agrupación.

Crear una tabla de resumen de ventas

Creemos una nueva tabla llamada sales.sales_summary para la demostración.

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

En esta consulta, recuperamos los datos del importe de las ventas por marca y categoría y los rellenamos en la tabla sales.sales_summary.

La siguiente consulta devuelve los datos de la tabla sales.sales_summary:

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

Iniciando con SQL Server CONJUNTOS DE AGRUPACIÓN

Por definición, un conjunto de agrupación es un grupo de columnas por el que se agrupa. Normalmente, una única consulta con un agregado define un único conjunto de agrupación.

Por ejemplo, la siguiente consulta define un conjunto de agrupación que incluye la marca y la categoría que se denota como (brand, category). La consulta devuelve el importe de las ventas agrupado por marca y categoría:

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

La siguiente consulta devuelve el importe de las ventas por marca. Define un conjunto de agrupación (brand):

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

La siguiente consulta devuelve el importe de las ventas por categoría. Define un conjunto de agrupación (category):

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

La siguiente consulta define un conjunto de agrupación vacío (). Devuelve el importe de las ventas de todas las marcas y categorías.

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

Las cuatro consultas anteriores devuelven cuatro conjuntos de resultados con cuatro conjuntos de agrupación:

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

Para obtener un conjunto de resultados unificado con los datos agregados de todos los conjuntos de agrupación, puede utilizar el operador UNION ALL.

Debido a que el operador UNION ALL requiere que todos los conjuntos de resultados tengan el mismo número de columnas, es necesario añadir NULL a la lista de selección de las consultas así:

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

La consulta generó un único resultado con los agregados de todos los conjuntos de agrupación como esperábamos.

Sin embargo, tiene dos problemas importantes:

  1. La consulta es bastante larga.
  2. La consulta es lenta porque SQL Server necesita ejecutar cuatro subconsultas y combina los conjuntos de resultados en uno solo.

Para solucionar estos problemas, SQL Server proporciona una subcláusula de la cláusula GROUP BY llamada GROUPING SETS.

La cláusula GROUPING SETS define múltiples conjuntos de agrupación en la misma consulta. A continuación se muestra la sintaxis general de la GROUPING SETS:

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

Esta consulta crea cuatro conjuntos de agrupación:

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

Puede utilizar esta GROUPING SETS para reescribir la consulta que obtiene los datos de ventas de la siguiente manera:

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

Como puede ver, la consulta produce el mismo resultado que la que utiliza el operador UNION ALL. Sin embargo, esta consulta es mucho más legible y, por supuesto, más eficiente.

Función GROUPING

La función GROUPING indica si una columna especificada en una cláusula GROUP BY está agregada o no. Devuelve 1 para agregado o 0 para no agregado en el conjunto de resultados.

Véase el siguiente ejemplo de consulta:

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

El valor de la columna grouping_brand indica que la fila está agregada o no, 1 significa que el importe de las ventas está agregado por marca, 0 significa que el importe de las ventas no está agregado por marca. El mismo concepto se aplica a la columna grouping_category.

En este tutorial, ha aprendido a generar múltiples conjuntos de agrupación en una consulta utilizando el SQL Server GROUPING SETS.

Deja una respuesta

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