0% found this document useful (0 votes)
80 views34 pages

Grouping and Summarizing Data

Using aggregate functions with NULL values CLR Integration, Assemblies Leverage the.NET 2. API Deploy custom developed CLR assemblies within the SQL Server Process Introduced in SQL Server 2005.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
80 views34 pages

Grouping and Summarizing Data

Using aggregate functions with NULL values CLR Integration, Assemblies Leverage the.NET 2. API Deploy custom developed CLR assemblies within the SQL Server Process Introduced in SQL Server 2005.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 34

Module 3:

Grouping and
Summarizing Data

Module 3: Grouping and Summarizing Data
Summarizing Data by Using Aggregate Functions
Summarizing Grouped Data
Ranking Grouped Data
Creating Crosstab Queries
Lesson 1: Summarizing Data by Using Aggregate
Functions
Aggregate Functions Native to SQL Server
Using Aggregate Functions with NULL Values
CLR Integration, Assemblies
Implementing Custom Aggregate Functions
Aggregate Functions Native to SQL Server
Can be used in:
The select list of a SELECT statement

A COMPUTE or COMPUTE BY clause

A HAVING clause
USE AdventureWorks
SELECT AVG(VacationHours)AS
'AverageVacationHours', SUM
(SickLeaveHours) AS 'TotalSickLeaveHours
FROM HumanResources.Employee
WHERE Title LIKE 'Vice President%'
USE AdventureWorks
SELECT COUNT(*)
FROM Sales.SalesPerson
WHERE SalesQuota > 25000;
USE AdventureWorks
SELECT MAX(TaxRate)
FROM Sales.SalesTaxRate
GROUP BY TaxType;
Using Aggregate Functions With NULL Values
USE AdventureWorks
SELECT AVG(ISNULL(Weight,0)) AS AvgWeight
FROM Production.Product
The COUNT(*) function is an exception and returns
the total number of records in a table
Use the ISNULL function to correct this issue
NULL values may produce unexpected or incorrect
results
Most aggregate functions ignore NULL values
CLR Integration, Assemblies
Leverage the .NET 2.0 API
Deploy custom developed CLR assemblies within the
SQL Server Process
Introduced in SQL Server 2005
Implementing Custom Aggregate Functions
CREATE ASSEMBLY StringUtilities FROM
PathToAssembly\StringUtilities.dll'
WITH PERMISSION_SET=SAFE;
CREATE AGGREGATE Concatenate(@input
nvarchar(4000))
RETURNS nvarchar(4000)
EXTERNAL NAME [StringUtilities].[Concatenate]
Can be created using any .NET language such as C#
and VB
Custom programs in an assembly that are imported
into SQL Server using the integrated CLR
Demonstration: Using Common Aggregate
Functions
This demonstration shows how to use some of the
common aggregate functions in SQL Server 2008. The
Human Resources (HR) department of Adventure Works
requires information about employees. This would be an
excellent situation to show the usage of several aggregate
functions.
Lesson 2: Summarizing Grouped Data
Using the GROUP BY clause
Filtering Grouped Data by Using the HAVING Clause
Building a Query for Summarizing Grouped Data GROUP
BY
Examining How the ROLLUP and CUBE Operators Work
Using the ROLLUP and CUBE Operators
Using the COMPUTE and COMPUTE BY Clauses
Building a Query for Summarizing Grouped Data -
COMPUTE
Using GROUPING SETS
Using the GROUP BY Clause
SELECT SalesOrderID, SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
ORDER BY SalesOrderID
Source
Table
Group 1
Group 2
Specifies the groups into which the output rows must
be placed
Calculates a summary value for aggregate functions
SalesOrderID SubTotal
1 23761
2 45791
3 75909
4 19900
Filtering Grouped Data by Using the HAVING
Clause
SELECT SalesOrderID, SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
HAVING SUM(LineTotal) > 100000.00
ORDER BY SalesOrderID
Specifies a search condition for a group
Can be used only with the SELECT statement
SalesOrderID SubTotal
43875 121761.939600
43884 115696.331324
44518 126198.336168
44528 108783.587200
44530 104958.806836
44795 104111.515642
46066 100378.907800
...
Building a Query for Summarizing Grouped Data
GROUP BY
GROUP BY




GROUP BY with HAVING clause



SELECT A.City, COUNT(E. BusinessEntityID) EmployeeCount
FROM HumanResources.Employee E
INNER JOIN Person.Address A ON E.BusinessEntityID =
A.AddressID
GROUP BY A.City ORDER BY A.City;
SELECT DATEPART(yyyy,OrderDate) AS 'Year' ,SUM(TotalDue) AS
'Total Order Amount'
FROM Sales.SalesOrderHeader
GROUP BY DATEPART(yyyy,OrderDate)
HAVING DATEPART(yyyy,OrderDate) >= '2003'
ORDER BY DATEPART(yyyy,OrderDate)
City EmployeeCount
Bellevue 35
Berlin 1
Bordeaux 1
Bothell 22
Calgary 1
Cambridge 2
...
Year Total Order Amount
2003 54307615.0868
2004 32196912.4165
Examining How the ROLLUP and CUBE Operators
Work
SELECT a, b, c, SUM (<expression>)
FROM T
GROUP BY CUBE (a,b,c)
SELECT a, b, c, SUM ( <expression> )
FROM T
GROUP BY ROLLUP (a,b,c)
ROLLUP and CUBE generate summary information in a
query
ROLLUP generates a result set showing the aggregates
for a hierarchy of values in selected columns
CUBE generates a result set that shows the aggregates
for all combination of values in selected columns
Using the ROLLUP and CUBE Operators
SELECT ProductID,Shelf,SUM(Quantity) AS QtySum
FROM Production.ProductInventory
WHERE ProductID<6
GROUP BY ROLLUP(ProductID,Shelf)
SELECT ProductID,Shelf,SUM(Quantity) AS QtySum
FROM Production.ProductInventory
WHERE ProductID<6
GROUP BY CUBE(ProductID, Shelf)
ProductID Shelf QtySum
1 A 761
1 B 324
1 NULL 1085
2 A 791
2 B 318
2 NULL 1109
3 A 909
3 B 443
3 NULL 1352
4 A 900
ProductID Shelf QtySum
1 A 761
2 A 791
3 A 909
4 A 900
NULL A 3361
1 B 324
2 B 318
3 B 443
4 B 442
NULL B 1507
Demonstration: How to Use the ROLLUP and
CUBE Operators
This demonstration shows how to use the ROLLUP and
CUBE operator extensions of the GROUP BY SELECT
clause. You have been asked to summarize some
information in the AdventureWorks database. This would
be an excellent usage of these new operators.
Examining the COMPUTE and COMPUTE BY
Clauses
COMPUTE generates additional summary rows in a non-
relational format
COMPUTE BY generates control-breaks and subtotals in
the result set
Both COMPUTE and COMPUTE BY can be used in the
same query
Building a Query For Summarizing Grouped Data
- COMPUTE
COMPUTE






COMPUTE BY
SELECT SalesOrderID, UnitPrice, UnitPriceDiscount
FROM Sales.SalesOrderDetail
ORDER BY SalesOrderID
COMPUTE SUM(UnitPrice), SUM(UnitPriceDiscount)
SELECT SalesPersonID, CustomerID, OrderDate, SubTotal, TotalDue
FROM Sales.SalesOrderHeader
ORDER BY SalesPersonID, OrderDate
COMPUTE SUM(SubTotal), SUM(TotalDue) BY SalesPersonID
SalesOrderID UnitPrice UnitPriceDiscount
1 50 200
2 135 350
3 NULL 1085
sum Sum
185 1635
Using GROUPING SETS
New GROUP BY operator that aggregates several
groupings in one query
Eliminates multiple GROUP BY queries
Supports additional options as ability to use with
ROLLUP and CUBE operators
SELECT T.[Group] AS 'Region', T.CountryRegionCode AS 'Country'
,S.Name AS 'Store', H.SalesPersonID
,SUM(TotalDue) AS 'Total Sales'
FROM Sales.Customer C
INNER JOIN Sales.Store S
ON C.StoreID = S.BusinessEntityID
INNER JOIN Sales.SalesTerritory T
ON C.TerritoryID = T.TerritoryID
INNER JOIN Sales.SalesOrderHeader H
ON C.CustomerID = H.CustomerID
WHERE T.[Group] = 'Europe'
AND T.CountryRegionCode IN('DE', 'FR')
AND SUBSTRING(S.Name,1,4)IN('Vers', 'Spa ')
GROUP BY GROUPING SETS
(T.[Group], T.CountryRegionCode, S.Name, H.SalesPersonID)
ORDER BY T.[Group], T.CountryRegionCode, S.Name, H.SalesPersonID;
Region Country Store
NULL NULL NULL
NULL NULL NULL
NULL NULL NULL
NULL NULL Spa and Exercise Outfitters
NULL NULL Versatile Sporting Good Company
NULL DE NULL
NULL FR NULL
Europe NULL NULL
Lesson 3: Ranking Grouped Data
What Is Ranking?
Ranking Data by Using RANK
Ranking Data by Using DENSE_RANK
Ranking Data by Using ROW_NUMBER
Ranking Data by Using NTILE
Categorizing the Ranking Functions Based On Their
Functionality
What s Ranking?
Ranking computes a value for each row in user-specified
set of rows.
Ranking functions include:




Can be used for:
RANK
DENSE_RANK
NTILE
ROW_NUMBER
Arbitrary row numbering
Product Popularity
Best Customers
Ranking Data by Using RANK
SELECT P.Name Product, P.ListPrice, PSC.Name Category,
RANK() OVER(PARTITION BY PSC.Name
ORDER BY P.ListPrice DESC)
AS PriceRank
FROM Production.Product P
JOIN Production.ProductSubCategory PSC
ON P.ProductSubCategoryID = PSC.ProductSubCategoryID
Product ListPrice Category PriceRank
Men's Bib-Shorts, S 89.99 Bib-Shorts 1
Men's Bib-Shorts, M 89.99 Bib-Shorts 1
Men's Bib-Shorts, L 89.99 Bib-Shorts 1
Hitch Rack - 4-Bike 120.00 Bike Racks 1
All-Purpose Bike Stand 159.00 Bike Stands 1
Mountain Bottle Cage 9.99 Bottles and Cages 1
Road Bottle Cage 8.99 Bottles and Cages 2
Ranking Data by Using DENSE_RANK
SELECT P.Name Product, P.ListPrice, PSC.Name Category,
DENSE_RANK()
OVER(PARTITION BY PSC.Name ORDER BY P.ListPrice DESC)
AS PriceRank
FROM Production.Product P
JOIN Production.ProductSubCategory PSC
ON P.ProductSubCategoryID = PSC.ProductSubCategoryID

Product ListPrice Category PriceRank
HL Mountain Handlebars 120.27 Handlebars 1
HL Road Handlebars 120.27 Handlebars 1
HL Touring Handlebars 91.57 Handlebars 2
ML Mountain Handlebars 61.92 Handlebars 3
HL Headset 124.73 Headsets 1
ML Headset 102.29 Headsets 2
LL Headset 34.20 Headsets 3

Ranking Data by Using ROW_NUMBER
SELECT ROW_NUMBER()
OVER(PARTITION BY PC.Name ORDER BY ListPrice)
AS Row, PC.Name Category, P.Name Product, P.ListPrice
FROM Production.Product P
JOIN Production.ProductSubCategory PSC
ON P.ProductSubCategoryID = PSC.ProductSubCategoryID
JOIN Production.ProductCategory PC
ON PSC.ProductCategoryID = PC.ProductCategoryID

Row Category Product ListPrice
1 Accessories Patch Kit/8 Patches 2.29
2 Accessories Road Tire Tube 3.99
1 Bikes Road-750 Black, 44 539.99
2 Bikes Road-750 Black, 44 539.99
Ranking Data by Using NTILE
SELECT NTILE(3) OVER(PARTITION BY PC.Name ORDER BY ListPrice)
AS PriceBand, PC.Name Category, P.Name Product, P.ListPrice
FROM Production.Product P
JOIN Production.ProductSubCategory PSC
ON P.ProductSubCategoryID = PSC.ProductSubCategoryID
JOIN Production.ProductCategory PC
ON PSC.ProductCategoryID = PC.ProductCategoryID

PriceBand Category Product ListPrice
1 Accessories Patch Kit/8 Patches 2.29
1 Accessories Road Tire Tube 3.99
2 Accessories LL Road Tire 21.49
2 Accessories ML Road Tire 24.99
3 Accessories Sport-100 Helmet, Blue 34.99
3 Accessories HL Mountain Tire 35.00
1 Bikes Road-750 Black, 44 539.99
1 Bikes Road-650 Red, 48 782.99
2 Bikes Road-650 Red, 52 782.99
...
Categorizing the Ranking Functions Based On
Their Functionality
Feature RANK DENSE_RANK NTILE ROW_NUMBER
Rows equally
distributed
among groups
Rows of equal
rank are
assigned the
same value
Sequential
numbering of
rows within a
partition
Lesson 4: Creating Crosstab Queries
How the PIVOT and UNPIVOT Operators Work
Using the PIVOT Operator
Using the UNPIVOT Operator
Grouping and Summarization Features New to SQL Server
2008
How the PIVOT and UNPIVOT Operators Work
Cust Bike Chain
Mike 8 2
Lisa 3 7
PIVOT converts values to columns
Cust Prod Qty
Mike Bike 8
Mike Chain 2
Lisa Bike 3
Lisa Chain 7
Cust Bike Chain
Mike 8 2
Lisa 3 7
Cust Prod Qty
Mike Bike 3
Mike Chain 2
Mike Bike 5
Lisa Bike 3
Lisa Chain 3
Lisa Chain 4
UNPIVOT converts columns to values
Using the PIVOT Operator
Cust Bike Chain
Mike 8 2
Lisa 3 7
PIVOT converts values to columns
SELECT * FROM
Sales.Order
PIVOT (SUM(Qty) FOR Prod
IN ([Bike],[Chain])) PVT
Cust Prod Qty
Mike Bike 3
Mike Chain 2
Mike Bike 5
Lisa Bike 3
Lisa Chain 3
Lisa Chain 4
Using the UNPIVOT Operator
Cust Prod Qty
Mike Bike 8
Mike Chain 2
Lisa Bike 3
Lisa Chain 7
SELECT Cust, Prod, Qty
FROM Sales.PivotedOrder
UNPIVOT (Qty FOR Prod IN
([Bike],[Chain])) UnPVT
Cust Bike Chain
Mike 8 2
Lisa 3 7
UNPIVOT converts columns to values
Grouping and Summarization Features New to
SQL Server 2008
CUBE Operator
ROLLUP Operator
GROUPING SETS Operator
GROUPING_ID Function
Lab: Grouping and Summarizing Data
Exercise 1: Summarizing Data by Using Aggregate
Functions
Exercise 2: Summarizing Grouped Data
Exercise 3: Ranking Grouped Data
Exercise 4: Creating Crosstab Queries
Logon information
Virtual machine NY-SQL-01
User name Administrator
Password
Pa$$w0rd
Estimated time: 60 minutes
Lab Scenario
You are the database administrator of Adventure Works.
The HR department wants you to prepare a report on the
number of vacation hours of the vice presidents of the
company, and another report on the number of employees
with incomplete addresses. The warehouse manager
requires three reports on the average number of hours
taken to manufacture a product, the order quantity and
the price list of each product, and the safety stock level for
red, blue, and black helmets. Besides these requests, the
marketing manager wants you to prepare a report on the
year-to-date sales of salespersons and rank their names
based on their performance.
Lab Review

When you execute queries with aggregate functions you
may see a warning message Null value is eliminated by
an aggregate or other SET operation. Why do you get
this?
When executing your query you receive the error Column
xyz is invalid in the select list because it is not contained in
either an aggregate function or the GROUP BY clause.
What did you forget to do?
When ranking the salespersons into four categories based
on their year to date sales, were the amount of results in
each category even? Why or why not?
Module Review and Takeaways
Review Questions

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy