Unidad 5. Consultas de resumen (V)


Hemos dicho que los resúmenes se calculan sobre todas las filas del origen después de haber ejecutado el WHERE, pues ALL permite obtener un resumen de las filas que no cumplen el WHERE.
ALL Incluye todos los grupos y conjuntos de resultados, incluso aquellos en los que no hay filas que cumplan la condición de búsqueda especificada en la cláusula WHERE. Cuando se especifica ALL, se devuelven valores NULL para las columnas de resumen de los grupos que no cumplen la condición de búsqueda. No se puede especificar ALL con los operadores CUBE y ROLLUP.
GROUP BY ALL no se admite en consultas que tienen acceso a tablas remotas si también hay una cláusula WHERE en la consulta.

Por ejemplo, vamos a modificar la consulta anterior:


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

FROM pedidos

WHERE YEAR(fechapedido) = 1997

GROUP BY  ALL rep, clie

ORDER BY rep, clie; 

Resultado:

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

Cuál ha sido el efecto de añadir ALL? Se han añadido filas para las filas del origen que no cumplen la condición del WHERE pero sin que intervengan en el cálculo de las funciones de agregado.
Por ejemplo el representante 101 tiene pedidos con el cliente 2102 pero estos pedidos no son del año 1997, por eso aparece la primera fila (no estaba en el resultado de la otra consulta) pero con 0 y NULL como resultados de las funciones de agregado.

ROLLUP especifica que, además de las filas que normalmente proporciona GROUP BY, se incluyen filas de resumen en el conjunto de resultados. Los grupos se resumen en un orden jerárquico, desde el nivel inferior del grupo hasta el superior. La jerarquía del grupo se determina por el orden en que se especifican las columnas de agrupamiento. Cambiar el orden de las columnas de agrupamiento puede afectar al número de filas generadas en el conjunto de resultados.
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 ROLLUP; 

  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

Efecto: Se han añadido automáticamente subtotales por cada nivel de agrupamiento y una línea de totales generales al final. En este caso no hemos incluido ORDER BY porque las filas salen ya ordenadas.

Febrero-2010
Pág. 5.5

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.