Agrupar y Resumir Datos PDF

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 26

Procedimientos para agrupar y

resumir datos

Contenido

Introduccin 1
Presentacin de los primeros n valores 2
Uso de funciones de agregado 4
Fundamentos de GROUP BY 8
Generacin de valores de agregado
dentro de los conjuntos de resultados 13
Uso de las clusulas
COMPUTE y COMPUTE BY 22
Procedimientos para agrupar y resumir datos i

Notas para el instructor


Este mdulo proporciona a los alumnos los conocimientos necesarios para
agrupar y resumir datos mediante funciones de agregado. Entre dichos
conocimientos se incluye cmo usar las clusulas GROUP BY y HAVING para
resumir y agrupar datos, y los operadores ROLLUP y CUBE con la funcin
GROUPING para agrupar datos y resumir valores para dichos grupos. Este
mdulo describe tambin la forma de usar las clusulas COMPUTE y
COMPUTE BY para generar informes de resumen y para mostrar los n
primeros valores de un conjunto de resultados.
Al final de este mdulo, los alumnos sern capaces de:
Utilizar la palabra clave TOP n para obtener una lista de los primeros n
valores especificados de una tabla.
Generar un nico valor de resumen mediante el uso de funciones de
agregado.
Organizar los datos de resumen de una columna mediante el uso de
funciones de agregado con las clusulas GROUP BY y HAVING.
Generar datos de resumen de una tabla mediante el uso de funciones de
agregado con la clusula GROUP BY y los operadores ROLLUP o CUBE.
Generar informes con secciones mediante el uso de clusulas COMPUTE y
COMPUTE BY.
Procedimientos para agrupar y resumir datos 1

Introduccin
Objetivo del tema
Exponer un breve resumen
de los temas tratados en
este mdulo. Presentacin de los primeros n valores
Explicacin previa
Puede ser interesante Uso de funciones de agregado
agrupar o resumir los datos
cuando se obtienen. Fundamentos de GROUP BY

Generacin de valores de agregado dentro de los


conjuntos de resultados

Uso de las clusulas COMPUTE y COMPUTE BY

Puede ser interesante agrupar o resumir los datos cuando se obtienen.


Este mdulo proporciona a los alumnos los conocimientos necesarios para
agrupar y resumir datos mediante funciones de agregado. Entre dichos
conocimientos se incluye cmo usar las clusulas GROUP BY y HAVING para
resumir y agrupar datos, y los operadores ROLLUP y CUBE con la funcin
GROUPING para agrupar datos y resumir valores para dichos grupos. Este
mdulo describe tambin la forma de usar las clusulas COMPUTE y
COMPUTE BY para generar informes de resumen y para mostrar los n
primeros valores de un conjunto de resultados.
Despus de finalizar este mdulo, el alumno ser capaz de:
Utilizar la palabra clave TOP n para obtener una lista de los primeros
valores especificados de una tabla.
Generar un nico valor de resumen mediante el uso de funciones de
agregado.
Organizar los datos de resumen de una columna mediante el uso de
funciones de agregado con las clusulas GROUP BY y HAVING.
Generar datos de resumen de una tabla mediante el uso de funciones de
agregado con la clusula GROUP BY y los operadores ROLLUP o CUBE.
Generar informes con secciones mediante el uso de clusulas COMPUTE y
COMPUTE BY.
Procedimientos para agrupar y resumir datos 2

Presentacin de los primeros n valores


Objetivo del tema Presenta slo las n primeras filas de un conjunto de
Describir cmo se resultados
presentan los primeros n
valores de un resumen. Especifica el intervalo de valores con la clusula ORDER BY
Explicacin previa Devuelve las filas iguales si se utiliza WITH TIES
Utilice la palabra clave TOP
n para presentar slo las n Ejemplo
Ejemplo 11
primeras filas de un USE
USE northwind
northwind
conjunto de resultados. SELECT
SELECT TOP
TOP 55 orderid,
orderid, productid,
productid, quantity
quantity
FROM [order details]
FROM [order details]
ORDER
ORDER BY
BY quantity
quantity DESC
DESC
GO
GO
Ejemplo 2 Ejemplo 2
USE
USE northwind
northwind
SELECT
SELECT TOP
TOP 55 WITH
WITH TIES
TIES orderid,
orderid, productid,
productid, quantity
quantity
FROM
FROM [order
[order details]
details]
ORDER
ORDER BY
BY quantity
quantity DESC
DESC
GO
GO

Utilice la palabra clave TOP n para presentar slo las n primeras filas o el n por
Nota del instructor ciento de un conjunto de resultados. Aunque la palabra clave TOP n no es un
El uso de unos ndices
adecuados puede aumentar
estndar ANSI, resulta til, por ejemplo, para presentar los productos ms
la eficacia de las vendidos de una compaa.
operaciones de ordenacin
Cuando utilice la palabra clave TOP n o TOP n PERCENT, considere los
y agrupamiento. Este curso
no trata en detalle acerca de
hechos e instrucciones siguientes:
los ndices. Para obtener Especifique el intervalo de valores en la clusula ORDER BY. Si no utiliza
ms informacin acerca del
una clusula ORDER BY, Microsoft SQL Server 2000 devuelve las filas
uso de ndices, consulte el
curso 2329A, Programacin
que cumplen la clusula WHERE sin ningn orden concreto.
de una base de datos Utilice un entero sin signo a continuacin de la palabra clave TOP.
Microsoft SQL Server 2000.
Si la palabra clave TOP n PERCENT produce un nmero no entero de filas,
SQL Server redondea la cantidad no entera al siguiente valor entero.
Utilice la clusula WITH TIES para incluir las filas iguales en el conjunto
de resultados. Las filas iguales se producen cuando hay dos o ms filas con
valores iguales a los de la ltima fila devuelta segn la clusula ORDER
BY. Por lo tanto, el conjunto de resultados puede incluir cualquier nmero
de filas.

Nota Slo se puede utilizar la clusula WITH TIES cuando existe una
clusula ORDER BY.
Procedimientos para agrupar y resumir datos 3

Ejemplo 1 Este ejemplo utiliza la palabra clave TOP n para buscar los cinco productos ms
vendidos en un mismo pedido. Los valores iguales siguientes quedan excluidos
del conjunto de resultados.
USE northwind
SELECT TOP 5 orderid, productid, quantity
FROM [order details]
ORDER BY quantity DESC
GO

Resultado orderid productid quantity


10764 39 130
11072 64 130
10398 55 120
10451 55 120
10515 27 120

(5 filas afectadas)

Ejemplo 2 En este ejemplo se utiliza la palabra clave TOP n y la clusula WITH TIES para
buscar los cinco productos ms vendidos dentro de un mismo pedido. El
conjunto de resultados presenta un total de 10 productos, ya que se incluyen las
filas adicionales que tienen los mismos valores que la ltima fila incluida.
Compare el conjunto de resultados siguiente con el del ejemplo 1.
USE northwind
Sugerencia SELECT TOP 5 WITH TIES orderid, productid, quantity
Compare el conjunto de
FROM [order details]
resultados siguiente con el
del ejemplo 1. ORDER BY quantity DESC
GO

Resultado orderid productid quantity


10764 39 130
11072 64 130
10398 55 120
10451 55 120
10515 27 120
10595 61 120
10678 41 120
10711 53 120
10776 51 120
10894 75 120

(10 filas afectadas)


Procedimientos para agrupar y resumir datos 4

Uso de funciones de agregado


Objetivo del tema
Demostrar el uso de
Funcin
Funcin de
deagregado
agregado Descripcin
Descripcin
funciones de agregado para Funcin Descripcin
producir datos de resumen. AVG
AVG Promedio
Promediode
devalores
valoresen
enuna
unaexpresin
expresinnumrica
numrica

Explicacin previa COUNT


COUNT Nmero
Nmerode
devalores
valoresen
enuna
unaexpresin
expresin
Utilice funciones de
COUNT
COUNT(*)
(*) Nmero
Nmerode
defilas
filasseleccionadas
agregado para calcular seleccionadas

valores a partir de columnas MAX


MAX Valor
Valorms
msalto
altoen
enlalaexpresin
expresin
e incluir dichos valores en
MIN Valor
Valorms
msbajo
bajoen
enlalaexpresin
un conjunto de resultados. MIN expresin

SUM
SUM Valores
Valorestotales
totalesen
enuna
unaexpresin
expresinnumrica
numrica

STDEV
STDEV Desviacin
Desviacinestadstica
estadsticade
detodos
todoslos
losvalores
valores

STDEVP
STDEVP Desviacin
Desviacinestadstica
estadsticapara
paralalapoblacin
poblacin

VAR
VAR Varianza
Varianzaestadstica
estadsticade
detodos
todoslos
losvalores
valores

VARP
VARP Varianza
Varianzaestadstica
estadsticade
detodos
todoslos
losvalores
valorespara
paralalapoblacin
poblacin

Las funciones que calculan promedios y sumas se llaman funciones de


agregado. Cuando se ejecuta una funcin de agregado, SQL Server resume los
valores de toda una tabla o de grupos de columnas de una tabla, y produce un
valor por cada conjunto de filas para las columnas especificadas:
Las funciones de agregado se pueden utilizar en la instruccin SELECT o
en combinacin con la clusula GROUP BY.
Con la excepcin de la funcin COUNT(*), todas las funciones de agregado
devuelven NULL si ninguna fila cumple la clusula WHERE. La funcin
COUNT(*) devuelve el valor cero si ninguna fila cumple la clusula
WHERE.

Sugerencia Para aumentar el rendimiento de las consultas, indice las columnas


de agregado con frecuencia. Por ejemplo, si calcula frecuentemente la columna
quantity, la indizacin de dicha columna mejora el rendimiento de las
operaciones de agregado.

El tipo de datos de una columna determina las funciones que se pueden utilizar
con ella. La tabla siguiente describe las relaciones entre las funciones y los tipos
de datos.
Procedimientos para agrupar y resumir datos 5

Funcin Tipo de datos

COUNT COUNT es la nica funcin de agregado que se puede utilizar


en las columnas de los tipos de datos text, ntext o image.
MIN y MAX En las columnas con tipos de datos bit no se pueden utilizar las
funciones MIN y MAX.
SUM y AVG Las funciones de agregado SUM y AVG slo se pueden utilizar
en las columnas con tipos de datos int, smallint, tinyint,
decimal, numeric, float, real, money y smallmoney.
Cuando se utiliza la funcin SUM o AVG, SQL Server trata
los tipos de datos smallint o tinyint como un valor de tipo de
datos int en el conjunto de resultados.

Sintaxis parcial SELECT [ ALL | DISTINCT ]


[ TOP n [PERCENT] [ WITH TIES] ] <listaSeleccin>
[ INTO nuevaTabla]
[ FROM <tablasOrigen > ]
[ WHERE <condicionesBsqueda> ]
[ [ GROUP BY [ALL] expresinAgrupacin [, n]]
[HAVING <condicionesBsqueda> ]
[ WITH { CUBE | ROLLUP } ]
]
[ ORDER BY { columna [ ASC | DESC ] } [, n] ]
[ COMPUTE
{ { AVG | COUNT | MAX | MIN | SUM } (expresin) } [, n]
[ BY expresin [, n]
]

Ejemplo 1 En este ejemplo se calcula el precio promedio por unidad de todos los
productos de la tabla products.
USE northwind
SELECT AVG(unitprice)
FROM products
GO

Resultado
28.8663

(1 fila afectada)

Ejemplo 2 En este ejemplo se suman todas las filas de la columna quantity de la tabla
order details.
USE northwind
SELECT SUM(quantity)
FROM [order details]
GO

Resultado
51317

(1 fila afectada)
Procedimientos para agrupar y resumir datos 6

Uso de funciones de agregado con valores nulos


Objetivo del tema
Explicar el comportamiento
La mayora de las funciones de agregado pasan por alto
de los valores nulos cuando
se utilizan con funciones de los valores nulos
agregado.
La funcin COUNT(*) cuentas las filas con valores nulos
Explicacin previa
Puede recibir resultados
Ejemplo
Ejemplo 11
inesperados si utiliza USE
USE northwind
northwind
funciones de agregado SELECT
SELECT COUNT
COUNT (*)
(*)
con valores nulos. FROM
FROM employees
employees
GO
GO

Ejemplo
Ejemplo 22
USE
USE northwind
northwind
SELECT
SELECT COUNT(reportsto)
COUNT(reportsto)
FROM
FROM employees
employees
GO
GO

Los valores nulos pueden hacer que las funciones de agregado produzcan
resultados inesperados. Por ejemplo, si ejecuta una instruccin SELECT que
incluye una funcin COUNT en una columna que contiene 18 filas, dos de las
cuales contienen valores nulos, el conjunto de resultados devuelve un total de
16 filas. SQL Server pasa por alto las dos filas que contienen valores nulos.
Por tanto, preste atencin cuando utilice funciones de agregado en columnas
que contengan valores nulos, ya que puede que el conjunto de resultados no
sea representativo de los datos. Sin embargo, si decide utilizar funciones de
agregado con valores nulos, considere los hechos siguientes:
Las funciones de agregado de SQL Server, con la excepcin de la funcin
COUNT (*), pasan por alto los valores nulos en las columnas.
La funcin COUNT (*) cuenta todas las filas, incluso si todas las columnas
contienen un valor nulo. Por ejemplo, si ejecuta una instruccin SELECT
que incluya la funcin COUNT (*) en una columna que contenga un total de
18 filas, dos de las cuales contienen valores nulos, el conjunto de resultados
devuelve un total de 18 filas.

Ejemplo 1 En este ejemplo se presenta el nmero de empleados de la tabla employees.


USE northwind
SELECT COUNT(*)
FROM employees
GO

Resultado
9

(1 fila afectada)
Procedimientos para agrupar y resumir datos 7

Ejemplo 2 Este ejemplo presenta el nmero de empleados de la tabla employees que no


tienen un valor nulo en la columna reportsto, lo que indica que se ha definido
un superior inmediato para ese empleado.
USE northwind
SELECT COUNT(reportsto)
FROM employees
GO

Resultado
8

(1 fila afectada)
Procedimientos para agrupar y resumir datos 8

Fundamentos de GROUP BY
Objetivo del tema
Proporcionar una introduc-
cin a las clusulas que
resumen los valores de Uso de la clusula GROUP BY
una columna.
Uso de la clusula GROUP BY con la clusula HAVING
Explicacin previa
Las funciones de agregado
se suelen utilizar junto con
las clusulas GROUP BY y
HAVING.

Por s mismas, las funciones de agregado slo producen un valor de resumen


para todas las filas de una columna.
Si desea generar valores de resumen para una sola columna, utilice funciones
de agregado con la clusula GROUP BY. Utilice la clusula HAVING con la
clusula GROUP BY para restringir los grupos de filas devueltas en el conjunto
de resultados.

Nota El uso de la clusula GROUP BY no garantiza que se vaya a usar ningn


criterio de ordenacin. Si desea que los resultados se ordenen, debe incluir la
clusula ORDER BY.
Procedimientos para agrupar y resumir datos 9

Uso de la clusula GROUP BY


USE
USE northwind
northwind
Objetivo del tema USE
USE northwind
northwind
SELECT
SELECT productid
productid
SELECT
SELECT productid,
productid, orderid
orderid
Explicar cmo se utiliza la ,quantity
,quantity ,SUM(quantity)
,SUM(quantity) AS
AS total_quantity
total_quantity
clusula GROUP BY para FROM
FROM orderhist
orderhist FROM
FROM orderhist
orderhist
GO GROUP
GROUP BY
BY productid
productid
resumir datos. GO
GO
GO
Explicacin previa productid
productid orderid
orderid quantity
quantity productid
productid total_quantity
total_quantity
Utilice la clusula GROUP 11 11 55 11 15
BY en columnas o 15
11 11 10 Slo se agrupan las
expresiones para organizar 10
filas que
22 35
35
filas en grupos y para 22 11 10
10 cumplan la clusula 33 45
45
WHERE
resumir dichos grupos. 22 22 25
25
productid
productid total_quantity
total_quantity
33 11 15
15
22 35
35
33 22 30
30
USE
USE northwind
northwind
SELECT
SELECT productid
productid
,SUM(quantity)
,SUM(quantity) AS
AS total_quantity
total_quantity
FROM
FROM orderhist
orderhist
WHERE
WHERE productid
productid == 22
GROUP
GROUP BY
BY productid
productid
GO
GO

Utilice la clusula GROUP BY en columnas o expresiones para organizar


filas en grupos y para resumir dichos grupos. Por ejemplo, utilice la clusula
GROUP BY para determinar la cantidad de cada producto pedida en todos los
pedidos.
Cuando utilice la clusula GROUP BY, considere los hechos e instrucciones
Sugerencia siguientes:
La tabla orderhist se ha
creado especficamente SQL Server produce una columna de valores por cada grupo definido.
para los ejemplos de este
mdulo. Tambin se incluye SQL Server slo devuelve filas por cada grupo especificado; no devuelve
en el disco compacto informacin de detalle.
Material del alumno.
Todas las columnas que se especifican en la clusula GROUP BY tienen
Compare los conjuntos de que estar incluidas en la lista de seleccin.
resultados de la diapositiva. Si incluye una clusula WHERE, SQL Server slo agrupa las filas que
La tabla de la izquierda cumplen las condiciones de la clusula WHERE.
presenta todas las filas de
la tabla orderhist. En la lista de columnas de la clusula GROUP BY puede haber hasta
8.060 bytes.
La tabla de la parte superior No utilice la clusula GROUP BY en columnas que contengan varios
derecha utiliza la clusula
GROUP BY para agrupar
valores nulos, porque los valores nulos se procesan como otro grupo.
todos los datos de la Utilice la palabra clave ALL con la clusula GROUP BY para presentar
columna productid y todas las filas que tengan valores nulos en las columnas de agregado,
presentar la cantidad independientemente de si las filas cumplen la condicin de la clusula
total pedida para cada WHERE.
uno de los grupos.

La tabla de la parte inferior Nota La tabla orderhist se ha creado especficamente para los ejemplos de
derecha utiliza la clusula este mdulo. La secuencia de comandos 2317A_R04.sql, que se incluye en el
GROUP BY y la clusula disco compacto Material del alumno, se puede ejecutar para agregar dicha tabla
WHERE para restringir el a la base de datos Northwind.
nmero de filas devuelto.
Procedimientos para agrupar y resumir datos 10

Ejemplo 1 En este ejemplo se devuelve informacin acerca de los pedidos de la tabla


orderhist. La consulta agrupa y presenta cada identificador de producto y
calcula la cantidad total pedida. La cantidad total se calcula con la funcin
de agregado SUM y presenta un valor para cada producto del conjunto de
resultados.
USE northwind
SELECT productid, SUM(quantity) AS total_quantity
FROM orderhist
GROUP BY productid
GO

Resultado productid total_quantity


1 15
2 35
3 45

(3 filas afectadas)

Ejemplo 2 Este ejemplo agrega una clusula WHERE a la consulta del ejemplo 1. Esta
consulta restringe las filas al producto cuyo identificador es 2 y, despus,
agrupa dichas filas y calcula la cantidad total pedida. Compare este conjunto
de resultados con el del ejemplo 1.
USE northwind
SELECT productid, SUM(quantity) AS total_quantity
FROM orderhist
WHERE productid = 2
GROUP BY productid
GO

Resultado productid total_quantity


2 35

(1 fila afectada)

Ejemplo 3 En este ejemplo se devuelve informacin acerca de los pedidos de la tabla


order details. Esta consulta agrupa y presenta los identificadores de los
productos y, despus, calcula la cantidad total pedida. La cantidad total se
calcula con la funcin de agregado SUM y presenta un valor para cada producto
del conjunto de resultados. En este ejemplo no se incluye una clusula WHERE
y, por tanto, se devuelve un total por cada identificador de producto.
USE northwind
SELECT productid, SUM(quantity) AS total_quantity
FROM [order details]
GROUP BY productid
GO

Resultado productid total_quantity


61 603
3 328
32 297
.
.
.
(77 filas afectadas)
Procedimientos para agrupar y resumir datos 11

Uso de la clusula GROUP BY con la clusula HAVING


Objetivo del tema
Explicar cmo se utiliza USE
USE northwind
northwind USE
USE northwind
northwind
la clusula HAVING para SELECT
SELECT productid,
productid, orderid
orderid SELECT
SELECT productid,
productid, SUM(quantity)
SUM(quantity)
,quantity
,quantity AS
AS total_quantity
total_quantity
resumir ms los datos, en
FROM
FROM orderhist
orderhist FROM
FROM orderhist
orderhist
funcin de los grupos. GO GROUP
GO GROUP BY
BY productid
productid
Explicacin previa HAVING
HAVING SUM(quantity)>=30
SUM(quantity)>=30
GO
GO
Puede utilizar la clusula productid
productid orderid
orderid quantity
quantity
HAVING para establecer 11 11 55
condiciones en los grupos
11 11 10 productid
productid total_quantity
que se incluyen en un 10 total_quantity
conjunto de resultados. 22 11 10
10 22 35
35
22 22 25
25 33 45
45
33 11 15
15
33 22 30
30

Utilice la clusula HAVING en columnas o expresiones para establecer


condiciones en los grupos incluidos en un conjunto de resultados. La clusula
HAVING establece condiciones en la clusula GROUP BY de una forma muy
similar a como interacta la clusula WHERE con la instruccin SELECT.
Cuando utilice la clusula HAVING, considere los hechos e instrucciones
Sugerencia siguientes:
Destaque la condicin
de bsqueda definida en Utilice la clusula HAVING slo con la clusula GROUP BY para restringir
la clusula HAVING del los agrupamientos. El uso de la clusula HAVING sin la clusula GROUP
ejemplo de la diapositiva.
BY no tiene sentido.
La tabla de la derecha En una clusula HAVING puede haber hasta 128 condiciones. Cuando
agrupa todos los datos de utilice varias condiciones, tiene que combinarlas con operadores lgicos
la columna productid pero (AND, OR o NOT).
slo presenta la cantidad
total pedida para los grupos Puede hacer referencia a cualquiera de las columnas que aparezcan en la
que cumplen la condicin lista de seleccin.
de bsqueda de la clusula No utilice la palabra clave ALL con la clusula HAVING, porque la
HAVING.
clusula HAVING pasa por alto la palabra clave ALL y slo devuelve los
grupos que cumplen la clusula HAVING.
Procedimientos para agrupar y resumir datos 12

Ejemplo 1 En este ejemplo se presentan todos los grupos de productos de la tabla


orderhist que tienen pedidos de 30 unidades o ms.
USE northwind
SELECT productid, SUM(quantity) AS total_quantity
FROM orderhist
GROUP BY productid
HAVING SUM(quantity) >=30
GO

Resultado productid total_quantity


2 35
3 45

(2 filas afectadas)

Ejemplo 2 En este ejemplo se presenta el identificador de producto y la cantidad para todos


los productos que tienen pedidos de ms de 1.200 unidades.
USE northwind
SELECT productid, SUM(quantity) AS total_quantity
FROM [order details]
GROUP BY productid
HAVING SUM(quantity) > 1200
GO

Resultado productid total_quantity


59 1496
56 1263
60 1577
31 1397

(4 filas afectadas)
Procedimientos para agrupar y resumir datos 13

Generacin de valores de agregado dentro de los


conjuntos de resultados
Objetivo del tema
Proporcionar una
introduccin a los valores
de resumen de una tabla Uso de la clusula GROUP BY con el operador ROLLUP
mediante los operadores
ROLLUP y CUBE. Uso de la clusula GROUP BY con el operador CUBE
Explicacin previa Uso de la funcin GROUPING
Utilice la clusula GROUP
BY con los operadores
ROLLUP y CUBE para
generar valores de
agregado dentro de los
conjuntos de resultados. Si
lo hace, utilizar la funcin
GROUPING para interpretar
el conjunto de resultados.

Utilice la clusula GROUP BY con los operadores ROLLUP y CUBE para


generar valores de agregado dentro de los conjuntos de resultados. Los
operadores ROLLUP o CUBE pueden ser tiles para obtener informacin de
referencias cruzadas dentro de una tabla sin tener que escribir secuencias de
comandos adicionales.
Cuando utilice los operadores ROLLUP o CUBE, use la funcin GROUPING
para identificar los valores de detalle y de resumen dentro del conjunto de
resultados.
Procedimientos para agrupar y resumir datos 14

Uso de la clusula GROUP BY con el operador ROLLUP


Objetivo del tema USE
USE northwind
northwind
Explicar cmo se utiliza el SELECT
SELECT productid,
productid, orderid,
orderid, SUM(quantity)
SUM(quantity) AS
AS total_quantity
total_quantity
FROM
FROM orderhist
orderhist
operador ROLLUP para GROUP
GROUP BY
BY productid,
productid, orderid
orderid
resumir los datos de una WITH
WITH ROLLUP
ROLLUP
ORDER
ORDER BY
BY productid,
productid, orderid
orderid
tabla. GO
GO
Explicacin previa productid
productid orderid
orderid total_quantity
total_quantity Descripcin
Utilice el operador ROLLUP NULL NULL 95
NULL NULL 95 Total
Totalgeneral
general
para resumir los datos de 11 NULL 15
NULL 15 Resume
una tabla. Resumeslo
slolas
lasfilas
filaspara
paraproductid
productid11
11 11 55
Detalla
Detallaelelvalor
valorpara
paraproductid
productid1,1,orderid
orderid11
11 22 10
10
Detalla
Detalla el valor para productid 1, orderid22
el valor para productid 1, orderid
22 NULL
NULL 35
35
22 11 10
Resume
Resumesloslolas
lasfilas
filaspara
paraproductid
productid22
10
22 22 25 Detalla
Detalla el valor para productid2,2,orderid
el valor para productid orderid11
25
33 NULL 45 Resume
Resumesloslolas
lasfilas
filaspara
paraproductid
productid33
NULL 45
33 11 15 Detalla
Detalla el valor para productid3,3,orderid
el valor para productid orderid11
15
33 22 30
30 Detalla
Detallaelelvalor
valorpara
paraproductid
productid3,3,orderid
orderid22

Utilice la clusula GROUP BY con el operador ROLLUP para resumir valores


Sugerencia de grupos. La clusula GROUP BY y el operador ROLLUP proporcionan datos
Explique que los valores
NULL del ejemplo de la
en un formato relacional estndar.
diapositiva indican que Por ejemplo, se puede generar un conjunto de resultados que incluya la cantidad
dichas filas concretas son
pedida de cada producto en cada pedido, la cantidad total pedida por cada
el resultado del operador
ROLLUP.
producto y el total final de todos los productos.
Cuando utilice la clusula GROUP BY con el operador ROLLUP, considere los
hechos e instrucciones siguientes:
SQL Server procesa los datos de derecha a izquierda en la lista de columnas
especificadas en la clusula GROUP BY. Despus, SQL Server aplica la
funcin de agregado a cada grupo.
SQL Server agrega al conjunto de resultados una fila que presenta los
clculos acumulados, como un total o un promedio acumulado. Dichos
clculos acumulados se indican en el conjunto de resultados con un valor
NULL.
Cuando utiliza el operador ROLLUP puede tener hasta 10 expresiones de
agrupacin.
Con el operador ROLLUP no se puede utilizar la palabra clave ALL.
Cuando utilice el operador ROLLUP, asegrese de que las columnas que
siguen a la clusula GROUP BY tienen una relacin significativa en su
entorno de trabajo.
Procedimientos para agrupar y resumir datos 15

Ejemplo 1 En este ejemplo se presentan todas las filas de la tabla orderhist y los valores
de cantidades de resumen de cada producto.
USE northwind
Sugerencia SELECT productid, orderid, SUM(quantity) AS total_quantity
Estos ejemplos estn
FROM orderhist
generados uno a partir de
otro, para que se pueda GROUP BY productid, orderid
comprender cmo ROLLUP WITH ROLLUP
complementa a GROUP BY. ORDER BY productid, orderid
GO

Resultado productid orderid total_quantity


NULL NULL 95
1 NULL 15
1 1 5
1 2 10
2 NULL 35
2 1 10
2 2 25
3 NULL 45
3 1 15
3 2 30

(10 filas afectadas)

Ejemplo 2 En este ejemplo se devuelve informacin acerca de los pedidos de la tabla


order details. Esta consulta contiene una instruccin SELECT con una clusula
GROUP BY sin el operador ROLLUP. El ejemplo devuelve la lista de las
cantidades totales de cada producto solicitadas en cada pedido, para los pedidos
cuyo orderid sea menor que 10250.
USE northwind
SELECT orderid, productid, SUM(quantity) AS total_quantity
FROM [order details]
WHERE orderid < 10250
GROUP BY orderid, productid
ORDER BY orderid, productid
GO

Resultado orderid productid total_quantity


10248 11 12
10248 42 10
10248 72 5
10249 14 9
10249 51 40

(5 filas afectadas)
Procedimientos para agrupar y resumir datos 16

Ejemplo 3 En este ejemplo se agrega el operador ROLLUP a la instruccin del ejemplo 2.


El conjunto de resultados incluye la cantidad total para:
Cada producto en cada pedido (tambin devuelto por la clusula
GROUP BY sin el operador ROLLUP).
Todos los productos de cada pedido.
Todos los productos de todos los pedidos (total final).

Observe en el conjunto de resultados que la fila que contiene NULL en las


columnas productid y orderid representa la cantidad total final de todos los
pedidos para todos los productos. Las filas que contienen NULL en la columna
productid representan la cantidad total de un producto en el pedido de la
columna orderid.
USE northwind
SELECT orderid, productid, SUM(quantity) AS total_quantity
FROM [order details]
WHERE orderid < 10250
GROUP BY orderid, productid
WITH ROLLUP
ORDER BY orderid, productid
GO

Resultado orderid productid total_quantity


NULL NULL 76
10248 NULL 27
10248 11 12
10248 42 10
10248 72 5
10249 NULL 49
10249 14 9
10249 51 40

(8 filas afectadas)
Procedimientos para agrupar y resumir datos 17

Uso de la clusula GROUP BY con el operador CUBE


USE
USE northwind
northwind
Objetivo del tema SELECT
SELECT productid,
productid, orderid,
orderid, SUM(quantity)
SUM(quantity) AS AS total_quantity
total_quantity
FROM
FROM orderhist
orderhist
Explicar cmo se utiliza GROUP
GROUP BY
BY productid,
productid, orderid
orderid
el operador CUBE para WITH
WITH CUBE
CUBE
ORDER BY productid, orderid
ORDER BY productid, orderid
resumir los datos de una GO
GO
tabla. productid
productid orderid
orderid total_quantity
total_quantity Descripcin
Explicacin previa NULL
NULL NULL
NULL 95
95 Total
Totalgeneral
general
El operador CUBE difiere NULL
NULL 11 30
30
Resume
Resumetodas
todaslas
lasfilas
filaspara
paraorderid
orderid11
del operador ROLLUP en El operador CUBE Resume
NULL
NULL 22 65
65 Resume todas las filas para orderid22
todas las filas para orderid
que el primero crea todas produce dos
11 NULL 15 Resume
Resumeslo slolas
lasfilas
filaspara
paraproductid
productid11
resmenes ms NULL 15
las combinaciones posibles de valores que el 11 11 55 Detalla
Detallaelelvalor
valorpara
paraproductid
productid1,1,orderid
orderid11
de los grupos en funcin operador ROLLUP Detalla
11 22 10
10 Detallaelelvalor
valorpara
paraproductid
productid1,1,orderid
orderid22
de la clusula GROUP BY Resume
22 NULL
NULL 35
35 Resumeslo slolas
lasfilas
filaspara
paraproductid
productid22
y, despus, aplica las Detalla
22 11 10
10 Detallaelelvalor
valorpara
paraproductid
productid2,2,orderid
orderid11
funciones de agregado. Detalla
22 22 25
25 Detallaelelvalor
valorpara
paraproductid
productid2,2,orderid
orderid22
33 NULL
NULL 45
45 Resume
Resumeslo slolas
lasfilas
filaspara
paraproductid
productid33
33 11 15
15 Detalla
Detallaelelvalor
valorpara
paraproductid
productid3,3,orderid
orderid11
33 22 30
30 Detalla
Detallaelelvalor
valorpara
paraproductid
productid3,3,orderid
orderid22

Utilice la clusula GROUP BY con el operador CUBE para crear y resumir


Sugerencia todas las combinaciones posibles de los grupos en funcin de la clusula
Seale que los valores
NULL del conjunto de
GROUP BY. Utilice la clusula GROUP BY con el operador ROLLUP para
resultados del ejemplo de la proporcionar datos en un formato relacional estndar.
diapositiva indican que
Cuando utilice la clusula GROUP BY con el operador CUBE, considere los
dichas filas concretas se
crean como resultado del
hechos e instrucciones siguientes:
operador CUBE. Si tiene n columnas o expresiones en la clusula GROUP BY, SQL Server
devuelve las 2n-1 combinaciones posibles en el conjunto de resultados.
Los valores NULL del conjunto de resultados indican que dichas filas
concretas son el resultado del operador CUBE.
Cuando utilice el operador CUBE, puede incluir hasta 10 expresiones de
agrupamiento.
Con el operador CUBE no se puede utilizar la palabra clave ALL.
Cuando utilice el operador CUBE, asegrese de que las columnas que
siguen a la clusula GROUP BY tienen una relacin significativa en su
entorno de trabajo.
Procedimientos para agrupar y resumir datos 18

Ejemplo En este ejemplo se devuelve un resultado que proporciona la cantidad de cada


producto en cada pedido, la cantidad total de todos los productos de cada
pedido, la cantidad total de cada producto en todos los pedidos y la cantidad
total final de todos los productos en todos los pedidos.
USE northwind
SELECT productid, orderid, SUM(quantity) AS total_quantity
FROM orderhist
GROUP BY productid, orderid
WITH CUBE
ORDER BY productid, orderid
GO

Resultado productid orderid total_quantity


NULL NULL 95
NULL 1 30
NULL 2 65
1 NULL 15
1 1 5
1 2 10
2 NULL 35
2 1 10
2 2 25
3 NULL 45
3 1 15
3 2 30

(12 filas afectadas)


Procedimientos para agrupar y resumir datos 19

Uso de la funcin GROUPING


USE
USE northwind
northwind
Objetivo del tema SELECT
SELECT productid,
productid, GROUPING
GROUPING (productid)
(productid)
Explicar cmo funciona ,orderid,
,orderid, GROUPING
GROUPING (orderid)
(orderid)
la funcin GROUPING. ,SUM(quantity)
,SUM(quantity) AS AS total_quantity
total_quantity
FROM
FROM orderhist
orderhist
Explicacin previa GROUP
GROUP BYBY productid,
productid, orderidorderid
WITH
WITH CUBE
CUBE
Utilice la funcin ORDER BY productid,
ORDER BY productid, orderid orderid
GROUPING con los GO
GO productid orderid total_quantity
operadores ROLLUP o NULL 1 NULL 1 95
CUBE para distinguir los NULL 1 1 0 30
valores de detalle y de NULL 1 2 0 65
resumen en un conjunto 1 representa los valores de resumen 1 0 NULL 1 15
de resultados. en la columna precedente 1 0 1 0 5
1 0 2 0 10
0 representa los valores de detalle en 2 0 NULL 1 35
la columna precedente 2 0 1 0 10
2 0 2 0 25
3 0 NULL 1 45
3 0 1 0 15
3 0 2 0 30

Utilice la funcin GROUPING con los operadores ROLLUP o CUBE para


Sugerencia distinguir los valores de detalle y de resumen en un conjunto de resultados. El
Seale que el conjunto de
resultados del ejemplo de la
uso de la funcin GROUPING ayuda a determinar si los valores NULL que
diapositiva es similar al de aparecen en un conjunto de resultados son realmente valores nulos de las tablas
la diapositiva anterior con base o si la fila que los contiene ha sido generada por los operadores ROLLUP
una excepcin importante: o CUBE.
se utiliza la funcin
GROUPING y se incluyen Cuando utilice la funcin GROUPING, considere los hechos e instrucciones
dos columnas adicionales siguientes:
en el conjunto de
resultados. El 1 representa
SQL Server produce nuevas columnas en el conjunto de resultados para
valores de resumen y el 0 cada columna especificada en la funcin GROUPING.
representa valores de SQL Server devuelve el valor 1 para representar los valores de resumen
detalle en la columna de ROLLUP o CUBE del conjunto de resultados.
precedente.
SQL Server devuelve el valor 0 para representar los valores de detalle del
conjunto de resultados.
Slo se puede especificar la funcin GROUPING en las columnas que
aparezcan en la clusula GROUP BY.
Utilice la funcin GROUPING para facilitar las referencias a los conjuntos
de resultados desde los programas.
Procedimientos para agrupar y resumir datos 20

Ejemplo 1 En este ejemplo se devuelve un resultado que proporciona la cantidad de cada


producto en cada pedido, la cantidad total de todos los productos de cada
pedido, la cantidad total de cada producto en todos los pedidos y la cantidad
total final de todos los productos en todos los pedidos. La funcin GROUPING
distingue las filas del conjunto de resultados que han sido generadas por el
operador CUBE.
USE northwind
SELECT productid, GROUPING (productid)
,orderid, GROUPING (orderid)
,SUM(quantity) AS total_quantity
FROM orderhist
GROUP BY productid, orderid
WITH CUBE
ORDER BY productid, orderid
GO

Resultado productid orderid total_quantity


NULL 1 NULL 1 95
NULL 1 1 0 30
NULL 1 2 0 65
1 0 NULL 1 15
1 0 1 0 5
1 0 2 0 10
2 0 NULL 1 35
2 0 1 0 10
2 0 2 0 25
3 0 NULL 1 45
3 0 1 0 15
3 0 2 0 30

(12 filas afectadas)


Procedimientos para agrupar y resumir datos 21

Ejemplo 2 En este ejemplo se utiliza la funcin GROUPING en las columnas productid y


orderid que aparecen en la clusula GROUP BY. El conjunto de resultados
tiene una columna adicional despus de las columnas productid y orderid.
La funcin GROUPING devuelve un 1 cuando los valores de dicha columna
concreta han sido agrupados por el operador CUBE. El conjunto de resultados
incluye la cantidad total de cada producto en cada pedido, de cada producto en
todos los pedidos, de todos los productos en cada pedido y la cantidad total de
todos los productos en todos los pedidos.
Observe en el conjunto de resultados que las filas que contienen valores NULL
en las columnas productid y orderid representan la cantidad total final de
todos los productos en todos los pedidos. Las filas que contienen NULL en la
columna productid representan la cantidad total de todos los productos en cada
pedido. Las filas que contienen NULL en la columna orderid representan la
cantidad total de un producto en todos los pedidos.
USE northwind
SELECT orderid, GROUPING(orderid), productid
,GROUPING(productid), SUM(quantity) AS total_quantity
FROM [order details]
WHERE orderid < 10250
GROUP BY orderid, productid
WITH CUBE
ORDER BY orderid, productid
GO

Resultado orderid productid total_quantity


NULL 1 NULL 1 76
NULL 1 11 0 12
NULL 1 14 0 9
NULL 1 42 0 10
NULL 1 51 0 40
NULL 1 72 0 5
10248 0 NULL 1 27
10248 0 11 0 12
10248 0 42 0 10
10248 0 72 0 5
10249 0 NULL 1 49
10249 0 14 0 9
10249 0 51 0 40

(13 filas afectadas)


Procedimientos para agrupar y resumir datos 22

Uso de las clusulas COMPUTE y COMPUTE BY


Objetivo del tema COMPUTE COMPUTE BY
Explicar el propsito de USE
USE northwind
northwind USE
USE northwind
northwind
las clusulas COMPUTE SELECT
SELECT productid,
productid, orderid
orderid SELECT
SELECT productid,
productid, orderid,
orderid, quantity
quantity
,quantity
,quantity FROM
FROM orderhist
orderhist
y COMPUTE BY. FROM orderhist ORDER BY productid, orderid
FROM orderhist ORDER BY productid, orderid
ORDER
ORDER BY
BY productid,
productid, orderid
orderid COMPUTE
COMPUTE SUM(quantity)
SUM(quantity) BY
BY productid
productid
Explicacin previa COMPUTE
COMPUTE SUM(quantity)
SUM(quantity) COMPUTE
COMPUTE SUM(quantity)
SUM(quantity)
Aunque las clusulas GO
GO GO
GO
productid
productid orderid
orderid quantity
COMPUTE y COMPUTE quantity
BY no son un estndar productid
productid orderid
orderid quantity
quantity 11 11 55
ANSI, puede que le interese 11 11 55 11 22 10
10
utilizarlas para presentar 11 22 10
10 sum
sum 15
15
informes bsicos o para 22 11 10 22 11 10
10 10
comprobar los resultados 22 22 25 22 22 25
25 25
de las aplicaciones que est
33 11 15 sum 35
desarrollando. 15 sum 35
33 22 30
30 33 11 15
15
sum
sum 95
95 33 22 30
30
sum
sum 45
45
sum
sum 95
95

Las clusulas COMPUTE y COMPUTE BY generan filas de resumen


Sugerencia adicionales en un formato no relacional que no se adaptan al estndar ANSI.
Estas clusulas no se
recomiendan para generar
Aunque presentan datos tiles, su salida no est adaptada para generar
aplicaciones. Sin embargo, conjuntos de resultados que se vayan a utilizar en otras aplicaciones.
pueden ser tiles para Por ejemplo, puede que le interese utilizar COMPUTE y COMPUTE BY para
probarlas.
presentar informes bsicos y rpidos, o para comprobar los resultados de las
aplicaciones que est desarrollando. Sin embargo, otras herramientas, como
Crystal Reports o Microsoft Access, ofrecen caractersticas ms completas para
la generacin de informes.
Si utiliza las clusulas COMPUTE y COMPUTE BY, considere los hechos
siguientes:
En las clusulas COMPUTE o COMPUTE BY no se pueden incluir tipos de
datos text, ntext o image.
No se puede ajustar el formato del conjunto de resultados. Por ejemplo, si
utiliza la funcin de agregado SUM, SQL Server presenta la palabra sum en
el conjunto de resultados. No se puede cambiar para que presente resumen.

Generacin de informes con valores de detalle y de resumen para una


columna
La clusula COMPUTE produce filas de detalle y un solo valor de agregado
para una columna. Cuando utilice la clusula COMPUTE, considere los hechos
y directrices siguientes:
En una misma instruccin se pueden utilizar varias clusulas COMPUTE
con la clusula COMPUTE BY.
SQL Server requiere que se especifiquen las mismas columnas en la lista de
seleccin que en la clusula COMPUTE.
No utilice la instruccin SELECT INTO en la misma instruccin que la
clusula COMPUTE, puesto que las instrucciones que incluyen COMPUTE
no generan una salida relacional.
Procedimientos para agrupar y resumir datos 23

Ejemplo 1 En este ejemplo se presentan todas las filas de la tabla orderhist y se genera el
total final de todos los productos pedidos.
USE northwind
SELECT productid, orderid, quantity
FROM orderhist
ORDER BY productid, orderid
COMPUTE SUM(quantity)
GO

Resultado productid orderid total_quantity


1 1 5
1 2 10
2 1 10
2 2 25
3 1 15
3 2 30

sum
==========
95
(7 filas afectadas)

Generacin de informes con valores de detalle y de resumen para


subconjuntos de grupos
La clusula COMPUTE BY genera filas de detalle y varios valores de resumen.
Los valores de resumen se generan cuando cambian los valores de la columna.
Utilice la clusula COMPUTE BY con datos que se puedan clasificar con
facilidad. Cuando utilice la clusula COMPUTE BY, considere los hechos e
instrucciones siguientes:
Para que las filas estn agrupadas, con la clusula COMPUTE BY tiene que
utilizar una clusula ORDER BY.
Especifique los nombres de las columnas despus de la clusula COMPUTE
BY para determinar qu valores de resumen son generados por SQL Server.
Las columnas que aparezcan despus de la clusula COMPUTE BY tienen
que ser idnticas a un subconjunto de las columnas que aparezcan despus
de la clusula ORDER BY. Tienen que estar en el mismo orden (de
izquierda a derecha), comenzar con la misma expresin y no saltar ninguna
de las expresiones.
Procedimientos para agrupar y resumir datos 24

Ejemplo 2 En este ejemplo se presentan todas las filas de la tabla orderhist, se genera el
total pedido para cada producto y el total final de todos los productos pedidos.
USE northwind
SELECT productid, orderid, quantity
FROM orderhist
ORDER BY productid, orderid
COMPUTE SUM(quantity) BY productid
COMPUTE SUM(quantity)
GO

Resultado productid orderid total_quantity


1 1 5
1 2 10

sum
==========
15

2 1 10
2 2 25

sum
==========
35

3 1 15
3 2 30

sum
==========
45

sum
==========
95
(10 filas afectadas)

También podría gustarte