2010-07-01 9 views
8

He descubierto que CUBE genera todas las permutaciones, pero estoy teniendo problemas con ROLLUP. No parece que haya buenos recursos en línea o en el libro que estoy leyendo para explicar SQL para personas como yo que luchan con ello.Comprender ROLLUP en SQL

Mi libro dice que ROLLUP es un caso especial del operador CUBE que excluye todos los casos que no siguen una jerarquía dentro de los resultados.

No estoy del todo seguro de lo que significa, pero al ejecutarlo en una tabla hice algunos resultados útiles.

Hice una tabla desde otra página en Google como esto:

Type  Store  Number 
Dog  Miami  12 
Cat  Miami  18 
Turtle Tampa  4 
Dog  Tampa  14 
Cat  Naples  9 
Dog  Naples  5 
Turtle Naples  1 

entonces aquí es la consulta que hice:

select store,[type], SUM(number) as Number from pets 

group by store, [type] 

with rollup 

Esto me muestra el número de cada tipo de animal doméstico en cada tienda y mascotas totales en cada tienda, lo cual es genial. Si quiero ver la consulta basada en mascotas, descubrí que debo cambiar el grupo por orden para que el tipo sea lo primero.

Entonces, ¿se acumula según la primera cláusula group by?

La otra pregunta es, leí que usa ROLLUP en lugar de CUBE cuando tiene una columna de año y mes para detenerla agregando el mismo mes en varios años. Creo que entiendo lo que esto significa, pero ¿alguien podría aclararlo? ¿Y cómo lo configuras así?

¿Se puede usar ROLLUP para excluir otras combinaciones de columnas también? Mi tabla de arriba es bastante simple y la consulta muestra "mascotas por tienda", pero si hubiera otras columnas, ¿podría incluirlas/excluirlas de los resultados?

Respuesta

13

Mejor explicado a través de un ejemplo. Supongamos que agrupa por A, B, C. A continuación, obtener las siguientes agrupaciones con acumulativo:

(A, B, C) 
(A, B) 
(A) 
() 

por lo que ver que el orden es importante, como ya descubierto. Si agrupa por A, C, B, se obtienen los siguientes agrupaciones lugar:

(A, C, B) 
(A, C) 
(A) 
() 
+0

Oh, wow que hace que sea más fácil de entender de forma masiva! Ojalá hubieran puesto eso en el libro de texto. Gracias. – NibblyPig

+0

De nada. ¿Podría marcar su pregunta como respondida? –

+0

Absolutamente, estaba esperando una respuesta para usar el paquete acumulativo para excluir otras combinaciones de columnas, pero en realidad encontré la respuesta a eso con grupos de conjuntos tan sí. ¡Debería escribir libros de texto porque la primera mitad de su respuesta me dijo más que mi libro de texto y un montón de Google! – NibblyPig