Saltar al contenido principal

GROUPING

ROLLUP y CUBE son modificadores de GROUP BY. Ambos calculan subtotales. ROLLUP toma una lista ordenada de columnas, por ejemplo (day, month, year), y calcula subtotales en cada nivel de agregación, y después un total general. CUBE calcula subtotales para todas las combinaciones posibles de las columnas especificadas. GROUPING identifica qué filas devueltas por ROLLUP o CUBE son superagregados y cuáles son las filas que devolvería un GROUP BY sin modificar. La función GROUPING toma varias columnas como argumento y devuelve una máscara de bits.
  • 1 indica que una fila devuelta por un modificador ROLLUP o CUBE de GROUP BY es un subtotal
  • 0 indica que una fila devuelta por ROLLUP o CUBE no es un subtotal

GROUPING SETS

De forma predeterminada, el modificador CUBE calcula subtotales para todas las combinaciones posibles de las columnas pasadas a CUBE. GROUPING SETS permite especificar las combinaciones concretas que se deben calcular. Analizar datos jerárquicos es un buen caso de uso para los modificadores ROLLUP, CUBE y GROUPING SETS. El ejemplo aquí es una tabla que contiene datos sobre qué distribución de Linux y qué versión de esa distribución están instaladas en dos centros de datos. Puede ser útil examinar los datos por distribución, versión y ubicación.

Cargar datos de ejemplo

Consultas sencillas

Obtén el número de servidores de cada centro de datos por distribución:

Comparar varias sentencias GROUP BY con GROUPING SETS

Desglose de los datos sin CUBE, ROLLUP ni GROUPING SETS:
La misma información con GROUPING SETS:

Comparación entre CUBE y GROUPING SETS

El CUBE de la siguiente consulta, CUBE(datacenter,distro,version), establece una jerarquía que puede no tener sentido. No tiene sentido comparar version entre las dos distribuciones (ya que Arch y RHEL no tienen el mismo ciclo de publicación ni los mismos criterios de nomenclatura de versiones). El ejemplo de GROUPING SETS que aparece a continuación es más apropiado, ya que agrupa distro y version en el mismo conjunto.
La versión del ejemplo anterior puede no tener sentido si no está asociada a una distro; si estuviéramos rastreando la versión del kernel, sí podría tenerlo, porque la versión del kernel puede asociarse a cualquiera de las distros. Usar GROUPING SETS, como en el siguiente ejemplo, puede ser una mejor opción.
Última modificación el 19 de junio de 2026