Unidad 5. Consultas de resumen (VI)


CUBE especifica que, además de las filas que normalmente proporciona GROUP BY, deben incluirse filas de resumen en el conjunto de resultados. Se devuelve una fila de resumen GROUP BY por cada posible combinación de grupo y subgrupo del conjunto de resultados. En el resultado se muestra una fila de resumen GROUP BY como NULL, pero se utiliza para indicar todos los valores.

Por ejemplo:


SELECT rep, clie, count(numpedido) AS [Número de pedidos], MAX(importe)  AS [Importe máximo]

FROM pedidos

WHERE YEAR(fechapedido) = 1997

GROUP BY  rep, clie WITH CUBE; 

Resultado:

rep clie Número
de pedidos
Importe
máximo
101 2113 1 225,00
101 NULL 1 225,00
102 2106 1 21,30
102 2120 1 37,50
102 NULL 3 37,50
103 2111 2 21,00
103 NULL 2 21,00
105 2103 4 275,00
105 2111 1 37,45
105 NULL 5 275,00
106 2101 1 14,28
106 NULL 1 14,28
107 2109 1 313,50
107 2124 2 24,30
107 NULL 3 313,50
108 2112 1 29,25
108 2114 1 71,00
108 2118 3 14,20
108 NULL 5 71,00
... ... ... ...
NULL NULL 23 450,00
NULL 2101 1 14,58
NULL 2103 4 275,00
NULL 2106 2 21,30
NULL 2107 1 6,32
NULL 2108 1 56,25
NULL 2109 1 313,50
NULL 2111 3 37,45
NULL 2112 2 450,00
NULL 2113 1 225,00
NULL 2114 1 71,00
NULL 2118 3 14,20
NULL 2120 1 37,50
NULL 2124 2 24,30

Efecto: Obtenemos además de los resultados obtenidos con ROLLUP (los totales por cada representante), los totales por el otro criterio (los totales por cada cliente).
El número de filas de resumen del conjunto de resultados se determina mediante el número de columnas que contiene la cláusula GROUP BY. Cada operando (columna) de la cláusula GROUP BY se enlaza según el agrupamiento NULL y se aplica el agrupamiento al resto de los operandos (columnas). CUBE devuelve todas las combinaciones posibles de grupo y subgrupo.

Tanto si utilizamos CUBE como ROLLUP, nos será útil la función de agregado GROUPING.

Si cogemos por ejemplo la primera fila remarcada (101 NULL …) el valor NULL, no sabemos si se refiere a una fila de subtotal o a que el representante 101 ha realizado un pedido sin número de cliente. Para poder salvar este problema se utiliza la función de agregado GROUPING.


SELECT rep, clie, count(numpedido) AS [Número de pedidos], MAX(importe)  AS [Importe máximo], GROUPING(clie) AS [Fila resumen] 

FROM pedidos

WHERE YEAR(fechapedido) = 1997

GROUP BY  rep, clie WITH ROLLUP;

rep clie Número
de pedidos
Importe
máximo
Fila
Resumen
101 2113 1 225,00 0
101 NULL 1 225,00 1
102 2106 2 21,30 0
102 2120 1 37,50 0
102 NULL 3 37,50 1
103 2111 2 21,00 0

Las filas que corresponden a subtotales aparecen con un 1 y las normales con un cero.

Ahora que estamos más familiarizados con las columnas de agrupamiento debemos comentar una regla a no olvidar:

EN LA LISTA DE SELECCIÓN DE UNA CONSULTA DE RESUMEN UN NOMBRE DE COLUMNA NO PUEDE APARECER FUERA DE UNA FUNCIÓN DE AGREGADO SI NO ES UNA COLUMNA DE AGRUPACIÓN.

Para practicar puedes realizar este Ejercicio Agrupar filas con GROUP BY.

Febrero-2010
Pág. 5.6

Atrás  Inicio  Adelante





Página inicial  Cursos Informática Gratuitos

Síguenos en:   Facebook       Sobre aulaClic            Política de Cookies


© aulaClic. Todos los derechos reservados. Prohibida la reproducción por cualquier medio.