Saltar a contenido

02.-Subcláusula CUBE

PostgreSQL CUBE es una subcláusula de la cláusula GROUP BY. CUBE le permite generar múltiples conjuntos de agrupación.

Un conjunto de agrupación es un conjunto de columnas a las que se desea agrupar.

A continuación se ilustra la sintaxis de la subcláusula CUBE:

SELECT
    c1,
    c2,
    c3,
    aggregate (c4)
FROM
    table_name
GROUP BY
    CUBE (c1, c2, c3);

En esta sintaxis:

  • Primero, especifique la subcláusula CUBE en la cláusula GROUP BY de la sentencia SELECT.
  • Segundo, en la lista de selección, especifique las columnas (dimensiones o columnas de dimensión) que desea analizar y las expresiones aggregation function.
  • En tercer lugar, en la cláusula GROUP BY, especifique las columnas de dimensión dentro de los paréntesis de la subcláusula CUBE.

La consulta genera todos los posibles conjuntos de agrupación basados en las columnas de dimensión especificadas en CUBE. La subcláusula CUBE es una forma abreviada de definir varios conjuntos de agrupación, por lo que las siguientes son equivalentes:

CUBE(c1,c2,c3) 

GROUPING SETS (
    (c1,c2,c3), 
    (c1,c2),
    (c1,c3),
    (c2,c3),
    (c1),
    (c2),
    (c3), 
    ()
 ) 

En general, si el número de columnas especificadas en el CUBO es n, entonces tendrá 2^n combinaciones.

PostgreSQL le permite realizar un cubo parcial para reducir el número de agregados calculados. A continuación se muestra la sintaxis:

SELECT
    c1,
    c2,
    c3,
    aggregate (c4)
FROM
    table_name
GROUP BY
    c1,
    CUBE (c1, c2);

Ejemplos de CUBE

Utilizaremos la tabla sales creada en el tutorial GROUPING SETS para la demostración.

Sales Table

La siguiente consulta utiliza la subcláusula CUBE para generar múltiples conjuntos de agrupación:

SELECT
    brand,
    segment,
    SUM (quantity)
FROM
    sales
GROUP BY
    CUBE (brand, segment)
ORDER BY
    brand,
    segment;

Este es el resultado:

PostgreSQL CUBE example

La siguiente consulta realiza un cubo parcial:

SELECT
    brand,
    segment,
    SUM (quantity)
FROM
    sales
GROUP BY
    brand,
    CUBE (segment)
ORDER BY
    brand,
    segment;

PostgreSQL CUBE - partial cube example

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