SlideShare una empresa de Scribd logo
Querying Microsoft SQL
Server 2012
Exam 70-461
Capítulo 5 – Grouping and Windowing

Julián Castiblanco P.
http://julycastiblanco.blogspot.com/
Julian_castiblancop@hotmail.com
MCT-MCSA-MCITP-MCTS SQL Server 2008/2005

Líder ITPros-DC
Material de trabajo
Windows Server 2012 trial
http://www.microsoft.com/en-us/download/details.aspx?id=11093
SQL Server 2012 with SP1 trial
http://www.microsoft.com/en-us/download/details.aspx?id=29066
AdventureWorks for SQL Server 2012
http://msftdbprodsamples.codeplex.com/releases/view/55330
Training kit SQL Server
Querying Microsoft SQL Server 2012 – exam 70-461
http://www.amazon.com/Training-Kit-Exam-70-461Microsoft/dp/0735666059/ref=sr_1_1?ie=UTF8&qid=1359206206&sr=81&keywords=querying+microsoft+sql+server+2012+training+kit+exam+70-461
Agenda
• Consultas Agrupadas
• Pivot and Unpivot
• Función de agregación especiales
Consultas Agrupadas
Las consultas básicas nos ayudan a
responder preguntas de detalle, por
ejemplo qué clientes realizaron
compras el día de hoy? O cuales
facturas han sido vendidas en el mes
y por qué valor.

Las agrupaciones dan un sentido más
analítico a las consultas, responden
preguntas como, cuantos clientes tengo?
Cuanto dinero he ganado/perdido en el
transcurso del año por producto?
Consultas Agrupadas

Funciones
Distinct

Having

•
•
•
•
•

Count()
Sum()
Average()
Max()
Min()

Group by

http://technet.microsoft.com/en-us/library/ms173454.aspx

•
•
•
•
•

stdev()
stdevp()
Grouping()
Grouping_id()
var()
Consultas Agrupadas
A cuanto asciende el valor de las ordenes y cuantas ordenes
fueron generadas en cada periodo del año 2005?

SELECT

DATENAME(MONTH,OrderDate) AS MES
,COUNT(*) AS NumeroOrdenes
,SUM(TOTALDUE) AS valorTotal
FROM [Sales].[SalesOrderHeader] AS S
WHERE YEAR(OrderDate)=2005
GROUP BY
DATENAME(MONTH,OrderDate),MONTH(OrderDate)
ORDER BY MONTH(OrderDate) asc
Consultas Agrupadas
Cuantas órdenes fueron enviadas por cada uno de los métodos de
transporte?
--suma ordernes por compañía
WITH Ordersbyshipper as(
select ShipMethodID, COUNT(ShipMethodID) as ordersbyshipper
from sales.SalesOrderHeader
Group by ShipMethodID)
--toma el nombre del metodo de transporte
select a.[Name],Ordersbyshipper.ordersbyshipper
from [Purchasing].[ShipMethod] a
inner join Ordersbyshipper
on a.[ShipMethodID]=Ordersbyshipper.[ShipMethodID]
Multiples Agrupaciones
Las sentencias GROUPING SETS, CUBE, ROLLUP permiten obtener múltiples
agrupaciones con una sola consulta. En las tres, se obtiene básicamente
sumatorias de nivel jerárquico superior es decir, subtotales por cada una de las
columnas de agrupación. GROUPING SETS es la más completa al permitir
especificar que tipo de subtotales deben ser calculados.
SELECT A.[ShipMethodID], YEAR(A.ShipDate) AS
shipyear
, COUNT(*) AS numorders
FROM sales.SalesOrderHeader A
where YEAR(ShipDate) is not null
GROUP BY GROUPING SETS (
( [ShipMethodID], YEAR(ShipDate) )
,( [ShipMethodID])
,( YEAR(ShipDate))
);
Pivot and Unpivot

1

2

3

1. Que quieres ver como filas
2. Que quieres ver como columnas,
3. Que información quieres ver en la intersección de ambas.
Pivot and Unpivot

SELECT

b.Name Territorio, C.City
, COUNT(*) AS numorders
FROM sales.SalesOrderHeader AS A
INNER JOIN SALES.SalesTerritory AS B
ON A.TerritoryID=b.TerritoryID
INNER JOIN [Person].[Address] AS C
ON A.ShipToAddressID=C.AddressID
INNER JOIN [Person].[StateProvince] AS D
ON C.StateProvinceID=D.StateProvinceID
WHERE b.Name='France'
GROUP BY b.Name, C.City;
Pivot and Unpivot

1
Territory

2
City

3
Quantity of orders by
City
Pivot and Unpivot

SELECT Territorio ,
[Paris],
[Les Ulis],
[Saint Ouen],
[Orleans],
[Colombes],
[Orly]
FROM (SELECT Territorio,City,numorders
FROM ventasEnFrancia
WHERE numorders>90) as SourceTable
PIVOT
(
SUM(numorders)
FOR City IN ([Paris],[Les Ulis],[Saint
Ouen],[Orleans],[Colombes],[Orly])
) AS pivotTable;
Pivot and Unpivot

Suponga que ahora, tiene
esta tabla y desea volver las
columnas a filas. A este
proceso se le conoce como
“unpivot”
Pivot and Unpivot
SELECT Territorio,
city,numorders FROM
(SELECT
territorio,[Paris],[Les
Ulis],[Saint
Ouen],[Orleans],[Colombes]
,[Orly]
FROM #unpivotexample) as
SourceTable
UNPIVOT
( numorders FOR CITY IN
([Paris],[Les Ulis],[Saint
Ouen],[Orleans],[Colombes]
,[Orly])
) AS UNPVT;
Lección 3: Funciones de agregación
Las funciones de agregación son las mismas vistas en la lección 1 (sum, count,
avg, min, max) excepto porque se usan bajo la clausula OVER.

“organice las ordenes bajo una secuencia numérica, agrupando la información
por transportadora, país destino y nombre de cliente”
SELECT b.ContactName,C.CompanyName,
A.ShipCountry,O.value
, SUM(O.value) OVER(PARTITION BY C.CompanyName,
A.ShipCountry) as value
, row_number() OVER(PARTITION BY C.CompanyName,
A.ShipCountry, b.ContactNamE ORDER BY b.ContactNamE,
O.value DESC) as value
FROM Orders a inner join [dbo].[Customers] b
on a.CustomerID=b.CustomerID
INNER JOIN Shippers C
ON A.ShipVia=C.ShipperID
INNER JOIN valueForOrder O
ON A.OrderID=O.OrderID
Funciones de agregación
La función RANK, ROW_NUMBER, DENSE_RANK, NTILE, permite agregar nuevas
columnas con secuenciales que pueden ser usados para tener un “consecutivo”
de cada fila, que puede depender de un partición.
SELECT A.CustomerID, A.SalesOrderNumber,ROUND(A.TotalDue,-3) AS VAL
, row_number() OVER(ORDER BY ROUND(A.TotalDue,-3) DESC) as rownum
, rank() OVER(ORDER BY ROUND(A.TotalDue,-3) DESC) as f_rank
, dense_rank() OVER(ORDER BY ROUND(A.TotalDue,-3) DESC) as f_denserank
, ntile(100) OVER(ORDER BY ROUND(A.TotalDue,-3) DESC) as f_tilegroup
FROM sales.SalesOrderHeader a

Más contenido relacionado

PDF
Introducción a JOINS, CTE, APPLY y SUBCONSULTAS
DOCX
Udproco undecimo b_y_c[1]
PDF
Ejercicios resueltos de sql
PDF
Manual sql server parte 1
PDF
Database admonfundamental itprosdc_chapter2
PDF
Tarea dqs en ssis nunca termina
DOCX
Taller de sql server no 3
Introducción a JOINS, CTE, APPLY y SUBCONSULTAS
Udproco undecimo b_y_c[1]
Ejercicios resueltos de sql
Manual sql server parte 1
Database admonfundamental itprosdc_chapter2
Tarea dqs en ssis nunca termina
Taller de sql server no 3

Destacado (20)

PDF
Tutorial procedure sqlserver2008.docx
PPTX
PPSX
Curso SQL - Leccion 6
PDF
Taller básico de JOINS, SUBQUERYING, APPLY, CTE
PPT
Presentacion Sql 2
PDF
Indices columnares | SolidQ Summit 2012
PPTX
Creacion de indices y constraints en sql server
PPTX
Como leer planes de ejecución - edición 2015
PPTX
SQL Saturday 254 10- Cosas que no se deben de hacer en una BD
PPTX
24 HOP edición Español - Planes de ejecución en sql server 2014 - Enrique Catala
PDF
Novedades en seguridad en SQL Server 2012 v1 | SolidQ Summit 2012
PPTX
Escribiendo código T-SQL eficientemente
PPTX
Diplomado Técnico SQL Server 2012 - Sesión 6/8
PDF
Toolbox SQL Server para optimización
PPTX
Creación de aplicaciones de bases de datos con MS SQL Server 2012
PDF
BEST_PRACTICES: Buenas Prácticas para el Desarrollador de bases de datos
PDF
Buenas prácticas de codificación para capas de acceso a datos de aplicaciones...
PDF
Planes de ejecución 1
Tutorial procedure sqlserver2008.docx
Curso SQL - Leccion 6
Taller básico de JOINS, SUBQUERYING, APPLY, CTE
Presentacion Sql 2
Indices columnares | SolidQ Summit 2012
Creacion de indices y constraints en sql server
Como leer planes de ejecución - edición 2015
SQL Saturday 254 10- Cosas que no se deben de hacer en una BD
24 HOP edición Español - Planes de ejecución en sql server 2014 - Enrique Catala
Novedades en seguridad en SQL Server 2012 v1 | SolidQ Summit 2012
Escribiendo código T-SQL eficientemente
Diplomado Técnico SQL Server 2012 - Sesión 6/8
Toolbox SQL Server para optimización
Creación de aplicaciones de bases de datos con MS SQL Server 2012
BEST_PRACTICES: Buenas Prácticas para el Desarrollador de bases de datos
Buenas prácticas de codificación para capas de acceso a datos de aplicaciones...
Planes de ejecución 1
Publicidad

Similar a Agrupando datos en SQL Server (20)

PPT
Mejoras en T-SQL para SQL Server 2005
PPTX
Dominando las funciones de ventana (window functions) en TSQL
PDF
Guia de ejercicio sql
PDF
Lenguaje tsql como aproximación a escenarios BI
PDF
Consultas sql
PDF
Consultas-SQL.pdf
PPTX
PDF
584307359-S04-s1-Operador-Logico-Clausulas-1.pdf
DOCX
Cheat_MySQL.docx
PDF
bd2-teorico02.pdf
PDF
Bdii 06 func_grupo_y_subconsultas
PPTX
Tarea bd
PPTX
70461 Sesion2 Uso del SELECT, DISTINCT, CASE
PPTX
Transact SQL Fundamental
PDF
Guía 05. Consultas resumen con MySQL - José J Sánchez H
PPTX
CONSULTAS AVANZADAS SQL.pptx
PPTX
CONSULTAS_AVANZADAS_SQL.pptx
PPTX
Sentencia select
DOCX
Sql postgres
Mejoras en T-SQL para SQL Server 2005
Dominando las funciones de ventana (window functions) en TSQL
Guia de ejercicio sql
Lenguaje tsql como aproximación a escenarios BI
Consultas sql
Consultas-SQL.pdf
584307359-S04-s1-Operador-Logico-Clausulas-1.pdf
Cheat_MySQL.docx
bd2-teorico02.pdf
Bdii 06 func_grupo_y_subconsultas
Tarea bd
70461 Sesion2 Uso del SELECT, DISTINCT, CASE
Transact SQL Fundamental
Guía 05. Consultas resumen con MySQL - José J Sánchez H
CONSULTAS AVANZADAS SQL.pptx
CONSULTAS_AVANZADAS_SQL.pptx
Sentencia select
Sql postgres
Publicidad

Más de Julián Castiblanco (20)

PPTX
Descubriendo los Datos - Bodegas de datos
PPTX
Tech Talk Live - ITPROSDC - Big data con july
PPTX
Global Azure Bootcamp 2016 Bogota SQL2016 dba IaaS PaaS v4
PPTX
Global Azure Cloud Camp Bogota Introduccion Azure datalake
PPTX
Lecciones aprendidas SQL Server AlwaryOn
PDF
Sql saturday 448 migración de bases de datos sql server hacia azure sqldb
PPTX
Databaseadmonfundamentalitprosdcchapter6
PPTX
Optimización de motores sql server 24 horas SQL Pass
PDF
Database Fundamentals - Sesión 1 - SQL Server
PDF
Carbura tusql sesion2_slideshare
PDF
Carbura tusql sesion1_slideshare
PDF
Características Adminsitración SQL Server 2012 Parte 3
PDF
70 462 Instalación SQL Server 2012
PDF
Instalación de Sql server 2014 ctp2 sobre azure
PDF
XQuery y XPath for SQL Server 2012 itpros dc_chapter6
DOCX
Taller Transact SQL ITProsDC - T2
PDF
Creación de bases automaticamente isa2006 y sql server 2008 r2 express edition
DOCX
Taller Básico Sentencias SQL
DOCX
Taller Consultas Básicas SQL Server No 1
PPTX
SQL Server Fundamentals 3ra Sesion
Descubriendo los Datos - Bodegas de datos
Tech Talk Live - ITPROSDC - Big data con july
Global Azure Bootcamp 2016 Bogota SQL2016 dba IaaS PaaS v4
Global Azure Cloud Camp Bogota Introduccion Azure datalake
Lecciones aprendidas SQL Server AlwaryOn
Sql saturday 448 migración de bases de datos sql server hacia azure sqldb
Databaseadmonfundamentalitprosdcchapter6
Optimización de motores sql server 24 horas SQL Pass
Database Fundamentals - Sesión 1 - SQL Server
Carbura tusql sesion2_slideshare
Carbura tusql sesion1_slideshare
Características Adminsitración SQL Server 2012 Parte 3
70 462 Instalación SQL Server 2012
Instalación de Sql server 2014 ctp2 sobre azure
XQuery y XPath for SQL Server 2012 itpros dc_chapter6
Taller Transact SQL ITProsDC - T2
Creación de bases automaticamente isa2006 y sql server 2008 r2 express edition
Taller Básico Sentencias SQL
Taller Consultas Básicas SQL Server No 1
SQL Server Fundamentals 3ra Sesion

Último (20)

PPT
El-Gobierno-Electrónico-En-El-Estado-Bolivia
PPT
introduccion a las_web en el 2025_mejoras.ppt
PDF
CyberOps Associate - Cisco Networking Academy
PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
PPT
Que son las redes de computadores y sus partes
PDF
taller de informática - LEY DE OHM
PDF
Calidad desde el Docente y la mejora continua .pdf
PPTX
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PDF
Plantilla para Diseño de Narrativas Transmedia.pdf
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PDF
Estrategia de apoyo tecnología grado 9-3
PDF
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PDF
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
PDF
Estrategia de apoyo tecnología miguel angel solis
PPTX
REDES INFORMATICAS REDES INFORMATICAS.pptx
PPTX
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
PDF
Maste clas de estructura metálica y arquitectura
PDF
Influencia-del-uso-de-redes-sociales.pdf
PPTX
Presentación PASANTIAS AuditorioOO..pptx
El-Gobierno-Electrónico-En-El-Estado-Bolivia
introduccion a las_web en el 2025_mejoras.ppt
CyberOps Associate - Cisco Networking Academy
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
Que son las redes de computadores y sus partes
taller de informática - LEY DE OHM
Calidad desde el Docente y la mejora continua .pdf
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
Plantilla para Diseño de Narrativas Transmedia.pdf
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
Estrategia de apoyo tecnología grado 9-3
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
Estrategia de apoyo tecnología miguel angel solis
REDES INFORMATICAS REDES INFORMATICAS.pptx
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
Maste clas de estructura metálica y arquitectura
Influencia-del-uso-de-redes-sociales.pdf
Presentación PASANTIAS AuditorioOO..pptx

Agrupando datos en SQL Server

  • 1. Querying Microsoft SQL Server 2012 Exam 70-461 Capítulo 5 – Grouping and Windowing Julián Castiblanco P. http://julycastiblanco.blogspot.com/ Julian_castiblancop@hotmail.com MCT-MCSA-MCITP-MCTS SQL Server 2008/2005 Líder ITPros-DC
  • 2. Material de trabajo Windows Server 2012 trial http://www.microsoft.com/en-us/download/details.aspx?id=11093 SQL Server 2012 with SP1 trial http://www.microsoft.com/en-us/download/details.aspx?id=29066 AdventureWorks for SQL Server 2012 http://msftdbprodsamples.codeplex.com/releases/view/55330 Training kit SQL Server Querying Microsoft SQL Server 2012 – exam 70-461 http://www.amazon.com/Training-Kit-Exam-70-461Microsoft/dp/0735666059/ref=sr_1_1?ie=UTF8&qid=1359206206&sr=81&keywords=querying+microsoft+sql+server+2012+training+kit+exam+70-461
  • 3. Agenda • Consultas Agrupadas • Pivot and Unpivot • Función de agregación especiales
  • 4. Consultas Agrupadas Las consultas básicas nos ayudan a responder preguntas de detalle, por ejemplo qué clientes realizaron compras el día de hoy? O cuales facturas han sido vendidas en el mes y por qué valor. Las agrupaciones dan un sentido más analítico a las consultas, responden preguntas como, cuantos clientes tengo? Cuanto dinero he ganado/perdido en el transcurso del año por producto?
  • 6. Consultas Agrupadas A cuanto asciende el valor de las ordenes y cuantas ordenes fueron generadas en cada periodo del año 2005? SELECT DATENAME(MONTH,OrderDate) AS MES ,COUNT(*) AS NumeroOrdenes ,SUM(TOTALDUE) AS valorTotal FROM [Sales].[SalesOrderHeader] AS S WHERE YEAR(OrderDate)=2005 GROUP BY DATENAME(MONTH,OrderDate),MONTH(OrderDate) ORDER BY MONTH(OrderDate) asc
  • 7. Consultas Agrupadas Cuantas órdenes fueron enviadas por cada uno de los métodos de transporte? --suma ordernes por compañía WITH Ordersbyshipper as( select ShipMethodID, COUNT(ShipMethodID) as ordersbyshipper from sales.SalesOrderHeader Group by ShipMethodID) --toma el nombre del metodo de transporte select a.[Name],Ordersbyshipper.ordersbyshipper from [Purchasing].[ShipMethod] a inner join Ordersbyshipper on a.[ShipMethodID]=Ordersbyshipper.[ShipMethodID]
  • 8. Multiples Agrupaciones Las sentencias GROUPING SETS, CUBE, ROLLUP permiten obtener múltiples agrupaciones con una sola consulta. En las tres, se obtiene básicamente sumatorias de nivel jerárquico superior es decir, subtotales por cada una de las columnas de agrupación. GROUPING SETS es la más completa al permitir especificar que tipo de subtotales deben ser calculados. SELECT A.[ShipMethodID], YEAR(A.ShipDate) AS shipyear , COUNT(*) AS numorders FROM sales.SalesOrderHeader A where YEAR(ShipDate) is not null GROUP BY GROUPING SETS ( ( [ShipMethodID], YEAR(ShipDate) ) ,( [ShipMethodID]) ,( YEAR(ShipDate)) );
  • 9. Pivot and Unpivot 1 2 3 1. Que quieres ver como filas 2. Que quieres ver como columnas, 3. Que información quieres ver en la intersección de ambas.
  • 10. Pivot and Unpivot SELECT b.Name Territorio, C.City , COUNT(*) AS numorders FROM sales.SalesOrderHeader AS A INNER JOIN SALES.SalesTerritory AS B ON A.TerritoryID=b.TerritoryID INNER JOIN [Person].[Address] AS C ON A.ShipToAddressID=C.AddressID INNER JOIN [Person].[StateProvince] AS D ON C.StateProvinceID=D.StateProvinceID WHERE b.Name='France' GROUP BY b.Name, C.City;
  • 12. Pivot and Unpivot SELECT Territorio , [Paris], [Les Ulis], [Saint Ouen], [Orleans], [Colombes], [Orly] FROM (SELECT Territorio,City,numorders FROM ventasEnFrancia WHERE numorders>90) as SourceTable PIVOT ( SUM(numorders) FOR City IN ([Paris],[Les Ulis],[Saint Ouen],[Orleans],[Colombes],[Orly]) ) AS pivotTable;
  • 13. Pivot and Unpivot Suponga que ahora, tiene esta tabla y desea volver las columnas a filas. A este proceso se le conoce como “unpivot”
  • 14. Pivot and Unpivot SELECT Territorio, city,numorders FROM (SELECT territorio,[Paris],[Les Ulis],[Saint Ouen],[Orleans],[Colombes] ,[Orly] FROM #unpivotexample) as SourceTable UNPIVOT ( numorders FOR CITY IN ([Paris],[Les Ulis],[Saint Ouen],[Orleans],[Colombes] ,[Orly]) ) AS UNPVT;
  • 15. Lección 3: Funciones de agregación Las funciones de agregación son las mismas vistas en la lección 1 (sum, count, avg, min, max) excepto porque se usan bajo la clausula OVER. “organice las ordenes bajo una secuencia numérica, agrupando la información por transportadora, país destino y nombre de cliente” SELECT b.ContactName,C.CompanyName, A.ShipCountry,O.value , SUM(O.value) OVER(PARTITION BY C.CompanyName, A.ShipCountry) as value , row_number() OVER(PARTITION BY C.CompanyName, A.ShipCountry, b.ContactNamE ORDER BY b.ContactNamE, O.value DESC) as value FROM Orders a inner join [dbo].[Customers] b on a.CustomerID=b.CustomerID INNER JOIN Shippers C ON A.ShipVia=C.ShipperID INNER JOIN valueForOrder O ON A.OrderID=O.OrderID
  • 16. Funciones de agregación La función RANK, ROW_NUMBER, DENSE_RANK, NTILE, permite agregar nuevas columnas con secuenciales que pueden ser usados para tener un “consecutivo” de cada fila, que puede depender de un partición. SELECT A.CustomerID, A.SalesOrderNumber,ROUND(A.TotalDue,-3) AS VAL , row_number() OVER(ORDER BY ROUND(A.TotalDue,-3) DESC) as rownum , rank() OVER(ORDER BY ROUND(A.TotalDue,-3) DESC) as f_rank , dense_rank() OVER(ORDER BY ROUND(A.TotalDue,-3) DESC) as f_denserank , ntile(100) OVER(ORDER BY ROUND(A.TotalDue,-3) DESC) as f_tilegroup FROM sales.SalesOrderHeader a