Analizar la informacin almacenada en la base de datos NorthWind haciendo uso de las distintas funciones de MS-SQL server.
Desarrollo de la prctica. Comentarios En una lnea USE northwind SELECT unitprice, (unitprice * 1.1), -- precio incrementado en 10% productname FROM products GO
Comentarios En un bloque /* Este cdigo devuelve todas las filas de la tabla products y muestra el precio por unidad, el precio umentado en un 10 por ciento y el nombre del producto. */ USE northwind SELECT unitprice, (unitprice * 1.1), productname FROM products GO
Variables Sintaxis DECLARE {@variableLocal tipoDatos} [,...n] SET @nombreVariableLocal = expresin En este ejemplo se crean las variables locales @EmpID y @vlname, se asigna un valor a @vlname y, a continuacin, se asigna un valor a @EmpID al consultar en la base de datos NorthWind para seleccionar el registro que contiene el valor de la variable local @vlname. USE northwind DECLARE @EmpID varchar(11) ,@vlName char(20) SET @vlname = 'Dodsworth' SELECT @EmpID = employeeid FROM employees WHERE LastName = @vlname SELECT @EmpID AS EmployeeID
Funciones del sistema Ejemplo 1 En este ejemplo se determina el promedio de la columna unitprice de todos los productos de la tabla products. USE northwind SELECT AVG(unitprice) AS AvgPrice FROM products
Ejemplo 2 En este ejemplo de funcin de metadatos se devuelve el nombre de la base de datos que se est utilizando actualmente. USE northwind SELECT DB_NAME() AS 'database'
Ejemplo 3 En este ejemplo se demuestra cmo puede convertir fechas a distintos estilos. SELECT 'ANSI:', CONVERT (varchar(30), GETDATE(), 102) AS Style UNION SELECT 'Japanese:', CONVERT(varchar(30), GETDATE(), 111) UNION SELECT 'European:', CONVERT(varchar(30), GETDATE(), 113)
Ejemplo 4 En este ejemplo se utiliza la opcin DATEFORMAT de la instruccin SET para dar formato a las fechas de la duracin de una conexin. Esta configuracin slo se utiliza en la interpretacin de las cadenas de caracteres cuando se convierten a valores de fecha. No tiene efecto al mostrar los valores de fecha. SET DATEFORMAT dmy DECLARE @vdate datetime SET @vdate = '29/11/98' SELECT @vdate
Ejemplo 5 En el ejemplo siguiente se calcula el valor ampliado de un producto que forma parte de un pedido; para ello se multiplica el precio unitario por la cantidad pedida y, a continuacin, se filtran los resultados de forma que slo se devuelvan las filas correspondientes a pedidos con un valor ampliado mayor de 10000. SELECT OrderID, ProductID,(UnitPrice * Quantity) as ExtendedAmount FROM [Order Details] WHERE (UnitPrice * Quantity) > 10000
Ejemplo 6 En este ejemplo se determina si un cliente tiene algn pedido antes de eliminarlo de la lista de clientes. USE northwind IF EXISTS (SELECT * FROM orders WHERE customerid = 'frank') PRINT '*** Customer cannot be deleted ***' ELSE BEGIN DELETE customers WHERE customerid = 'frank' PRINT '*** Customer deleted ***' END
Ejemplo 7 Ejecutar las siguientes consultas en el analizador de consulta y describir que hace cada una, demostrar cmo afecta a los datos, es decir contrastar el antes y despus.
Nota: En el ejercicio 15 la funcin EXEC ejectala por separado, del bloque de consulta del CREATE PROC porque es la forma de mandar a llamar a ese procedimiento que ya creaste. El @ es el parmetro que espera ese procedimiento para ejecutar la consulta que lleva dentro. El doble guin es la forma de comentar lneas en el Analizador de consultas.
Ejemplo 9 Ejecutar las siguientes consultas en el analizador de consulta y describir que hace cada una, demostrar cmo afecta a los datos, es decir contrastar el antes y despus.
01. USE NORTHWIND SELECT OrderID, Quantity As [Sin nombre de columna] FROM [Order Details] WHERE OrderID BETWEEN 11000 AND 11002
02. SELECT OrderID, SUM (Quantity) As [Sin nombre de columna] FROM [Order Details] WHERE OrderID BETWEEN 11000 AND 11002 GROUP BY OrderID
03. SELECT COUNT(*) FROM Employees
04. SELECT * FROM Employees
05. SELECT OrderID, AVG (Quantity) AS promedio FROM [Order Details] WHERE OrderID BETWEEN 11000 AND 11002 GROUP BY OrderID
06. SELECT OrderID, MIN(Quantity) AS promedio FROM [Order Details] WHERE OrderID BETWEEN 11000 AND 11002 GROUP BY OrderID
NOTA: En realidad todas las funciones de agregado ignoran los valores NULL excepto COUNT (*).
07. SELECT OrderID, SUM(Quantity) AS TOTAL FROM [Order Details] GROUP BY OrderID
08. SELECT OrderID, SUM(Quantity) AS TOTAL FROM [Order Details] GROUP BY OrderID HAVING SUM(Quantity) > 300
Ejemplo 10 Realice el siguiente ejercicio.
--Creacin de BD CREATE Database ventas GO USE ventas GO ---tabla vendedor CREATE TABLE VENDEDOR( idvendedor INT PRIMARY KEY , nombre VARCHAR(20), apellido VARCHAR(10), ); GO ---tabla ventas CREATE TABLE VENTAS( Idventa INT PRIMARY KEY , nombre VARCHAR(20), apellido VARCHAR(10), idvendedor INT foreign key (idvendedor) references VENDEDOR(idvendedor))
Ejemplo 11 Realice los siguientes ejercicios sobre la Base de Datos Nortwind
------------------------------------------------------------------------- --INSTRUCCIONES SELECT ELEMENTALES-- ------------------------------------------------------------------------- --1. Mostrar todas (*) las columnas de una tabla (from). select * from dbo.Products
--2. Mostrar solo las columnas especificadas. select ProductID, ProductName, UnitPrice, UnitsInStock from dbo.Products
--3. Incluir (ALL) filas duplicadas (valor predeterminado). select all * from dbo.Products -- Es exactamente lo mismo que la instruccin 1.
--4. No incluir (DISTINCT) filas duplicadas. select distinct * from dbo.Products
--5. Renombrar (AS) columnas. select ProductID as Identificador, ProductName as [Nombre Producto], Unit Price as [Precio Unidad], UnitsInStock as UnidadesStock from dbo.Products
--6. Renombrar (AS) tablas. select * from dbo.Products as Productos
------------------------------------------------------------------------- --INSTRUCCIONES WHERE (Condiciones en Select)-- ------------------------------------------------------------------------- -- 1. Condiciones con expresiones matemticas boleanas (>, <, =, >=, <=, != <>). --(Mostrar solo los productos con un precio mayor que 25) select * from dbo.Products where UnitPrice > 25
--(Mostrar el nombre de los productos con precio igual a 21) select ProductName as Nombre from dbo.Products where UnitPrice = 21
--2. Condiciones de intervalos numricos (BETWEEN AND). --(Mostrar los productos cuyo precio esta entre 25 y 35) select * from Products where UnitPrice between 25 and 35
--3. Condiciones de cadenas de caracteres (LIKE _ , %). -- (Mostrar todos los datos de los clientes cuyo nombre comienza por A) select * from Customers where ContactName like 'A%' - - El '%' significa cualquier cadena de caracteres.
-- (Mostrar los Paises que comienzan por U y despus un solo caracter). select Country as Paises from Customers where Country like 'U_' --El '_' significa cualquier caracter.
-- 4. Mostrar solamente las filas con valores nulos (IS NULL) en una columna determinada. select * from dbo.Customers where Region is null
-- 5. Mostrar solamente las filas con valores no nulos (IS NOT NULL) en una columna determinada. select * from Customers where Fax is not null
--6. Mostrar valores determinados (IN). select * from Products where UnitPrice in(10, 20, 30, 40)
-- 7. Mostrar valores condicionalmente en funcin de un grupo de valores de una columna (ANY/SOME) --La clausula ANY es equivalente a SOME. --Cuando tenemos una consulta que devuelve un conjunto de resultados podemos necesitar compararlos -- todos ellos y de una vez con otro valor. Lo mejor es ver un ejemplo de es tas expresiones:
-- Condicin Expresin Equivalente -- x > ANY (3, 5, 9) x > 3 -- x > ANY (1, 2) x > 1 -- x < ANY (1, 2) x < 2 -- x = ANY (1, 2) (x = 1) OR (x = 2) -- x <> ANY (1, 2) (x <> 1) OR (x <> 2)
-- Mostrar los productos cuando su precio es mayor que los precios de los de talles --de pedidos, cuando la cantidad del pedido es 130.
select * from Products where UnitPrice > ANY (select UnitPrice from [Order Details] where Quantity = 130) - - Esta consulta devuelve 18.00 y 35.25.
-- Por lo tanto solo se mostrarn productos cuyo precio sea mayor que 18.00, incluido 35.25 si lo hubiera.
-- 8. Con la clausula ALL podemos hacer lo mismo pero en este caso devolver todos los productos -- cuyo precio sea mayor que todos los precios de los detalles de pedidos de 130. Es decir, mayor que -- todos los valores devueltos por la segunda consulta (18.00, 35.25), o lo que es lo mismo, --mayor que 35.25
select * from Products where UnitPrice > ALL (select UnitPrice from [Order Details] where Quantity = 130)
--9. Comprobar la existencia de un registro.
-- Mostrar los empleados cuya ciudad tambin exista en la tabla de empleados .
select LastName, FirstName, City from Employees E where exists (select * from Customers C where E.City = C.City)
------------------------------------------------------------------------- --INTRUCCIONES ORDER BY (Ordenacin en Select)-- ------------------------------------------------------------------------- --1. Orden ascendente de filas. --(Tabla Productos ordenada por el precio de menor a mayor). select * from dbo.Products order by UnitPrice asc
-- ASC es el valor predeterminado, se puede omitir. select * from Products order by UnitPrice
--2. Orden descendente de filas. select * from Products order by UnitsInStock desc
--3. Combinaciones de orden en distintas filas. select ProductID, ProductName, UnitPrice, UnitsInStock from dbo.Products order by UnitPrice, UnitsInStock desc
------------------------------------------------------------------------- --SUBCONSULTAS EN SELECT O CONSULTAS ANIDADAS-- ------------------------------------------------------------------------- - - Una subconsulta es una consulta SELECT dentro de un WHERE en una consul ta previa SELECT. Es decir, realizamos - - dentro de una consulta, otra consulta para mostrar datos especificos de la primera consulta. Ejemplos:
-- 1. Mostrar todos los empleados que tengan el mismo sexo (TitleOfCourtesy) que el empleado 9 (EmployeeID). select * from dbo.Employees where TitleOfCourtesy = (select TitleOfCourtesy from dbo.Employees where EmployeeID = 9) -- Esta subconsulta devuelve 'Ms'.
-- 2. Mostrar todos los productos de las categoras (bdo.Categories) bebidas (Beverages) y condimentos (Condiments). select * from dbo.Products where CategoryID in (select CategoryID from dbo.Categories where CategoryName in ('Beverages','Condiments')) -- Esta subconsulta devuelve 1 y 2.
------------------------------------------------------------------------- --FUNCIONES DE AGREGACIN EN SELECT-- ------------------------------------------------------------------------- --1. Obtener el nmero de filas de una tabla --> COUNT(*). select count(*) from dbo.Customers -- Se cuentan todos los valores, incluidos los NULL.
-- Se puede dar nombre a esta columna de la siguiente forma. select count(*) as [Nmero de filas] from dbo.Customers
--2. Obtener el mmero de filas de una columna determinada -- > COUNT(NombreColumna). select count(Region) as [NFilas no NULL]from dbo.Customers -- No se incluyen los valores NULL.
--3. Obtener nmero de filas para varias columnas determinadas. select count(Region) as FilasNoNULL_Region, count(Fax) as FilasNoNULL_Fax from dbo.Customers
--4. Obtener el valor mximo (MAX) y mnimo (MIN) de una columna. select max(UnitPrice) as [Precio mximo], min(UnitsInStock) as [Stock mn imo] from dbo.Products
--5. Obtener un sumatorio (SUM) de una columna determinada. select sum(Freight) as [Peso Total] from dbo.Orders
--6. Obtener la media (AVG) de los valores de una columna determinada. select avg(Freight) as [Peso Medio] from dbo.Orders
------------------------------------------------------------------------- -- INSTRUCCIN GROUP BY (Agrupamiento de filas en funciones de agregacin)-- ------------------------------------------------------------------------- -- La instruccin GROUP BY permite especificar las columnas sobre las que se quieren aplicar las funciones de -- agregacin en lugar de hacerlo en una tabla completa. Es decir, muestra u n resultado de la funcin de agregacin --para cada elemento de la columna que especifiquemos. Ejemplos:
--1. Mostrar cuantas veces se repite cada precio de los productos. select UnitPrice, count(*) as [Filas con este precio] from Products group by UnitPrice
--2. Mostrar nmero de clientes de cada region y ciudad de USA. select Region, City, count(*) as [N Clientes] from Customers where Country = 'USA' group by Region, City order by [N Clientes] desc
-- NOTA 1: Siempre debe especificarse las mismas columnas en SELECT que en G ROUP BY. -- NOTA 2: Es una buena prctica ordenar (ORDER BY) los elementos cuando se realizan este tipo de consultas.
------------------------------------------------------------------------- --INSTRUCCIN HAVING (Condiciones en los resultados de GROUP BY)-- ------------------------------------------------------------------------- -- La instruccin HAVING es similar a WHERE pero para agrupamientos de funci ones de agregacin. Ejemplo:
-- 1. Mostrar lo mismo que el ejercicio 1 de la seccin anterior, con precio s mayor que 10 y repiticiones mayor que 2. select UnitPrice, count(*) as [Filas con este precio] from Products where UnitPrice > 10 group by UnitPrice having count(*) > 2
------------------------------------------------------------------------- Ejemplo 12 Realice el siguiente ejercicio
use Northwind go
if exists (select * from sys.tables where name = 'varchar_variable_dcha') drop table dbo.varchar_variable_dcha go
CREATE TABLE [dbo].varchar_variable_dcha( id bigint identity primary key, c varchar(200) NULL ) go
declare @i int set @i = 1 while @i<=10 -- 1.000.000 filas begin INSERT INTO dbo.varchar_variable_dcha SELECT top (100000) replace(cast(NEWID() as varchar(100)), '-','') + REPLICATE('a', 200-32) FROM [Northwind].[dbo].[Orders] CROSS JOIN [Northwind].[dbo].[Order Details]
print cast (@i as varchar(100)) set @i=@i+1 end go
select top(10) * from dbo.varchar_variable_dcha go Ejemplo 13 En este ejercicio se debe escribir sentencias SQL. Cada declaracin slo utilizar una sola tabla. Pasar por correo al profesor todas las sentecias. 1. Una lista de todos los detalles de la tabla de empleados. 2. Una lista de los nombres y apellidos de todos los empleados. 3. Una lista de todos los nombres de las ciudades que aparecen en la tabla de empleados. No mostrar 2 veces un mismo nombre de ciudad. 4. Una lista de los nombres de productos y precios unitarios. 5. En la tabla de empleados: una lista de los detalles completos de los empleados que viven en EE.UU. 6. A partir de la tabla Pedidos, listar todos los pedidos que tienen un gasto de envio > 50. 7. De la tabla de clientes: listar nombre de la empresa de todos los clientes donde el cargo es igual a Propietario. 8. A partir de los clientes una lista de todos donde el nombre del cliente comienza con la letra "A. 9. Una lista de los nombres de clientes donde la regin no est en blanco. 10. Una lista de todos los productos, ordenado por precio unitario (el ms barato primero). 11. Una lista de todos los productos, ordenado por precio unitario (el ms caro primero). 12. El nmero total de empleados. Nombre de la columna de salida "TotalEmpleados". 13. De la tabla de Pedidos, el pedido con el menor gasto de envi, el gasto de envi promedio y el mximo gasto de envi (puede estar separado en 3 consultas distintas). 14. Utilizando la tabla de clientes una lista de los nombres de ciudades y el nmero de clientes en cada ciudad. 15. Utilizando la tabla de clientes una lista de los nombres de ciudades y el nmero de clientes en cada ciudad. Solo las ciudades con al menos 2 clientes deben aparecer en la lista. 16. Insertar el cliente nuevo completando todos los campos de la tabla. 17. Actualizar el nombre del nuevo cliente pasando nmero de ID obtenido en el punto 16. 18. Eliminar el cliente insertado en el punto 16.
Procedimientos para agrupar y resumir datos 1
Prctica A: Procedimientos para agrupar y resumir datos Objetivos Despus de realizar esta prctica, el alumno ser capaz de: Utilizar las clusulas GROUP BY y HAVING para resumir datos por grupos. Utilizar los operadores ROLLUP y CUBE, y la funcin GROUPING para generar datos de resumen. Utilizar las clusulas COMPUTE y COMPUTE BY para generar informes con secciones, totales y promedios.
Requisitos previos El archivo lab052.zip contiene los archivos de comandos necesarios para la realizacin de la prctica, as como las correspondientes soluciones. Ejercicio 1 Uso de la palabra clave TOP n En este ejercicio, va a utilizar la palabra clave TOP n y la clusula WITH TIES para obtener las primeras filas, o un porcentaje de ellas, de un conjunto de resultados. La carpeta Soluciones contiene las secuencias de comandos completas para este ejercicio. Para utilizar la palabra clave TOP n y presentar las primeras filas de un conjunto de resultados En este procedimiento, debe modificar una secuencia de comandos para que devuelva las diez primeras filas de una consulta. La secuencia de comandos completa para este procedimiento es Answer_TopN1.sql.
Abra el Analizador de consultas de SQL Server y, si as se le pide, inicie una sesin en el servidor local con autenticacin de Microsoft Windows. En la lista BD, haga clic en northwind. Abra y examine la secuencia de comandos TopN.sql, que corresponde a una consulta que calcula el importe total de las ventas de cada pedido de la tabla order details y devuelve los resultados en orden decreciente. Modifique la consulta descrita en el paso 4 para que slo devuelva las diez primeras filas. USE northwind SELECT TOP 10 orderid ,(unitprice * quantity) AS totalsale FROM [order details] ORDER BY (unitprice * quantity) DESC GO Ejecute la consulta para comprobar que slo devuelve diez filas. Su resultado ser similar al siguiente conjunto de resultados. Resultado 2 Procedimientos para agrupar y resumir datos
Para presentar los primeros valores de un conjunto de resultados usando la palabra clave TOP n En este procedimiento va a utilizar la palabra clave TOP n para presentar los primeros valores de un conjunto de resultados. La secuencia de comandos completa para este procedimiento es Answer_TopN2.sql. Modifique la consulta descrita en el paso 5 del procedimiento anterior para que devuelva los diez primeros productos (incluidos los valores iguales) que tengan el mayor importe total. USE northwind SELECT TOP 10 WITH TIES orderid ,(unitprice * quantity) AS totalsale FROM [order details] ORDER BY (unitprice * quantity) DESC GO Ejecute la consulta para comprobar que devuelve once filas. Procedimientos para agrupar y resumir datos 3
Su resultado ser similar al siguiente conjunto de resultados. orderid totalsale
Resultado 4 Procedimientos para agrupar y resumir datos
Ejercicio 2 Uso de las clusulas GROUP BY y HAVING En este ejercicio, va a utilizar las clusulas GROUP BY y HAVING para resumir datos de la base de datos Northwind. La carpeta Soluciones contiene las secuencias de comandos completas para este ejercicio. Para utilizar la clusula GROUP BY para resumir los datos En este procedimiento va a abrir una secuencia de comandos que contiene una consulta con la clusula GROUP BY. A continuacin, modificar la consulta para obtener resultados diferentes. Abra y examine la secuencia de comandos Groupby.sql. Se trata de una consulta que calcula la cantidad total de artculos pedidos de dos categoras distintas de artculos de la tabla order details. Ejecute la consulta para revisar los resultados.
Su resultado ser similar al siguiente conjunto de resultados. categoryid total_quantity 1 9532 2 5298
(2 filas afectadas)
Para calcular la cantidad total para cada una de las categoras Answer_Groupby1.sql es la secuencia de comandos completa de este procedimiento. Modifique la secuencia de comandos descrita en el paso 1 del procedimiento anterior para resumir la cantidad por categora para todos los productos, sea cual sea su categora. USE northwind SELECT categoryid, SUM(quantity) AS total_quantity FROM [order details] AS od INNER JOIN products AS p ON od.productid = p.productid GROUP BY categoryid GO Ejecute la consulta para revisar los resultados.
Resultado Procedimientos para agrupar y resumir datos 5
Su resultado ser similar al siguiente conjunto de resultados. categoryid total_quantity
Para calcular la cantidad total para cada pedido En este procedimiento calcular la cantidad total para cada pedido. Answer_Groupby2.sql es la secuencia de comandos completa de este procedimiento. Modifique la secuencia de comandos descrita en el paso 1 del procedimiento anterior para resumir la cantidad por orderid (pedido) para todos los productos, sea cual sea su categora. USE northwind SELECT orderid, SUM(quantity) AS total_quantity FROM [order details] AS od INNER JOIN products AS p ON od.productid = p.productid GROUP BY orderid GO Ejecute la consulta para revisar los resultados.
Su resultado ser similar al siguiente conjunto de resultados parciales. orderid total_quantity 10248 27 10249 49 10250 60 . . . 11075 42 11076 50 11077 72
(830 filas afectadas)
Resultado Resultado 6 Procedimientos para agrupar y resumir datos
Para calcular el nmero de pedidos con ms de 250 unidades pedidas En este procedimiento calcular el nmero de pedidos con ms de 250 unidades pedidas. Answer_Groupby3.sql es la secuencia de comandos completa de este procedimiento. Modifique la secuencia de comandos descrita en el paso 1 del procedimiento anterior para resumir la cantidad por orderid (pedido) para todos los productos, sea cual sea su categora, y devolver slo los pedidos que tengan ms de 250 unidades pedidas USE northwind SELECT orderid, SUM(quantity) AS total_quantity FROM [order details] AS od INNER JOIN products AS p ON od.productid = p.productid GROUP BY orderid HAVING SUM(quantity) > 250 GO Ejecute la consulta para revisar los resultados.
Su resultado ser similar al siguiente conjunto de resultados. orderid total_quantity 10515 286 10612 263 10658 255 10678 280 10847 288 10895 346 10990 256 11030 330
(8 filas afectadas)
Resultado Procedimientos para agrupar y resumir datos 7
Ejercicio 3 Uso de los operadores ROLLUP y CUBE En este ejercicio, va a utilizar los operadores ROLLUP y CUBE para generar datos de resumen. Tambin va a utilizar la funcin GROUPING para determinar las filas del resultado que son resmenes. La carpeta Soluciones contiene las secuencias de comandos completas para este ejercicio. Para utilizar el operador ROLLUP con el fin de generar resultados de resumen En este procedimiento va a utilizar el operador ROLLUP con las clusulas GROUP BY y HAVING para generar resultados de resumen. La secuencia de comandos completa para este procedimiento es Answer_Rollup1.sql. Abra y examine la secuencia de comandos Answer_Rollup1.sql. Se trata de una consulta que resume la cantidad de artculos pedidos por cada productid y ordered, y realiza un clculo acumulativo. Modifique la consulta descrita en el paso 1 para que en el resultado slo aparezca el nmero de producto 50, con una clusula WHERE, y despus ejecute la consulta. USE northwind SELECT productid, orderid, SUM(quantity) AS total_quantity FROM [order details] WHERE productid = 50 GROUP BY productid, orderid WITH ROLLUP ORDER BY productid, orderid GO Ejecute la consulta para revisar los resultados. Cuente las filas que tienen valores nulos.
Su resultado ser similar al siguiente conjunto de resultados. productid orderid total_quantity
Resultado 8 Procedimientos para agrupar y resumir datos
4. Qu significan los valores nulos en las columnas productid y orderid? Los valores nulos en una fila indican que el valor que aparece en la columna total_quantity de esa fila es la suma de todos los valores total_quantity sin agrupar en la columna que tiene el valor nulo. Por ejemplo, el valor total_quantity en la fila en que productid y orderid tienen valor nulo es la suma de todos los valores total_quantity de la tabla. _____________________________________________________________ _____________________________________________________________
Para utilizar el operador CUBE con el fin de generar resultados de resumen En este procedimiento va a usar el operador CUBE y la funcin GROUPING para diferenciar entre las filas de resumen y detalles del conjunto de resultados. La secuencia de comandos completa para este procedimiento es Answer_Cube1.sql. Abra y examine la secuencia de comandos Answer_Rollup1.sql. Se trata de una consulta que resume la cantidad de artculos pedidos por cada productid y ordered, y realiza un clculo acumulativo. Modifique la consulta descrita en el paso 1 para usar el operador CUBE en lugar del operador ROLLUP. Adems, utilice la funcin GROUPING en las columnas productid y orderid para distinguir filas de resumen y filas de detalle dentro del conjunto de resultados, y, despus, ejecute la consulta. USE northwind SELECT productid ,GROUPING(productid) ,orderid ,GROUPING(orderid) ,SUM(quantity) AS total_quantity FROM [order details] WHERE productid = 50 GROUP BY productid, orderid WITH CUBE ORDER BY productid, orderid GO Ejecute la consulta para revisar los resultados. Procedimientos para agrupar y resumir datos 9
Su resultado ser similar al siguiente conjunto de resultados. productid orderid total_quantity
Qu filas son de resumen? Las filas que tienen el nmero 1 en las columnas de la funcin GROUPING. ____________________________________________________________ ____________________________________________________________ Qu filas son el resumen por producto? Y por pedido? Si el nmero 1 est presente en la columna generada por la funcin GROUPING para la columna productid, la fila es un resumen por pedido. La columna productid de dicha fila es NULL porque es un resumen, no una fila de detalle que contiene un valor NULL. La fila que tiene un nmero 1 en la columna GROUPING es un resumen para el producto nmero 50. La fila que tiene un nmero 1 en las dos columnas GROUPING es un total global. ____________________________________________________________ ____________________________________________________________
Resultado 10 Procedimientos para agrupar y resumir datos
Ejercicio 4 Uso de las clusulas COMPUTE y COMPUTE BY En este ejercicio va a utilizar las clusulas COMPUTE y COMPUTE BY para generar informes con secciones y totales, y promedios finales. La carpeta Soluciones contiene las secuencias de comandos completas para este ejercicio. Para utilizar la clusula COMPUTE con el fin de generar informes En este procedimiento va a modificar una consulta existente al agregar las clusulas COMPUTE y COMPUTE BY para generar subtotales y totales finales. Answer_Compute1.sql es la secuencia de comandos completa de este procedimiento. Abra y examine la secuencia de comandos Answer_Compute1.sql. Se trata de una consulta que devuelve el nmero de pedido (orderid) y la cantidad (quantity) pedida para todos los pedidos cuyo orderid >11070. Modifique la consulta descrita en el paso 1 para generar un total final de la columna cantidad (quantity) mediante el uso de la clusula COMPUTE. USE northwind SELECT orderid, quantity FROM [order details] WHERE orderid >= 11070 COMPUTE SUM(quantity) GO Ejecute la consulta para revisar los resultados.
Su resultado ser similar al siguiente conjunto de resultados parciales. orderid quantity 11070 40 11070 20 11070 30 . . . 11077 24 11077 4 11077 1
Sum ========== 543
(45 filas afectadas)
Resultado Procedimientos para agrupar y resumir datos 11
Para utilizar la clusula COMPUTE BY con el fin de generar informes En este procedimiento, va a modificar una consulta existente. Para ello, agregar la clusula COMPUTE BY con el fin de generar totales finales. Answer_Compute2.sql es la secuencia de comandos completa de este procedimiento. Abra y examine la secuencia de comandos Answer_Compute2.sql. Se trata de una consulta que devuelve el nmero de pedido (orderid) y la cantidad (quantity) pedida para todos los pedidos cuyo orderid >11070. Modifique la consulta descrita en el paso 1 para generar un informe con secciones que proporcione la cantidad total de los pedidos 11075 y 11076. USE northwind SELECT orderid, quantity FROM [order details] WHERE orderid in ( 11075, 11076 ) ORDER BY orderid COMPUTE SUM(quantity) BY orderid GO Ejecute la consulta para revisar los resultados.
Su resultado ser similar al siguiente conjunto de resultados. orderid quantity 11075 10 11075 30 11075 2 Sum ========== 42
11076 20 11076 20 11076 10 Sum ========== 50
(8 filas afectadas)
Resultado 12 Procedimientos para agrupar y resumir datos
Para agregar la cantidad total y cantidad promedio al final del informe con secciones En este procedimiento va a agregar la cantidad total y cantidad promedio al final del informe con secciones. Answer_Compute3.sql es la secuencia de comandos completa de este procedimiento. Modifique la consulta descrita en el paso 1 del procedimiento anterior para agregar la cantidad total y cantidad promedio al final del informe con secciones. USE northwind SELECT orderid, quantity FROM [order details] WHERE orderid in ( 11075, 11076 ) ORDER BY orderid COMPUTE SUM(quantity) BY orderid COMPUTE SUM(quantity) COMPUTE AVG(quantity) GO Ejecute la consulta para revisar los resultados.
Su resultado ser similar al siguiente conjunto de resultados. Observe que este conjunto de resultados es similar al del paso 3 del procedimiento anterior, con la adicin de los totales finales (cantidad total y cantidad promedio). orderid quantity