Module 4: Grouping and
Summarizing Data
Overview
Listing the TOP n Values
Using Aggregate Functions
GROUP BY Fundamentals
Generating Aggregate Values Within
Result Sets
Using the COMPUTE and COMPUTE BY
Clauses
Listing the TOP n Values
Lists Only the First n Rows of a Result
Set
Specifies the Range of Values in the
ORDER BY Clause
Example 1
USE Returns
northwind Ties if WITH TIES Is Used
SELECT TOP 5 orderid, productid, quantity
FROM [order details]
ORDER BY quantity DESC
GO
Example 2
USE northwind
SELECT TOP 5 WITH TIES orderid, productid, quantity
FROM [order details]
ORDER BY quantity DESC
GO
Using Aggregate Functions
Aggregate function Description
AVG Average of values in a numeric expression
COUNT Number of values in an expression
COUNT (*) Number of selected rows
MAX Highest value in the expression
MIN Lowest value in the expression
SUM Total values in a numeric expression
STDEV Statistical deviation of all values
STDEVP Statistical deviation for the population
VAR Statistical variance of all values
VARP Statistical variance of all values for the population
Using Aggregate Functions with Null
Values
Most Aggregate Functions Ignore Null
Values
COUNT(*) Function Counts Rows with
Null Values
USE northwind Example 1
SELECT COUNT (*)
FROM employees
GO
Example 2
USE northwind
SELECT COUNT(reportsto)
FROM employees
GO
GROUP BY Fundamentals
Using the GROUP BY Clause
Using the GROUP BY Clause with the
HAVING Clause
Using the GROUP BY Clause
USE northwind USE northwind
SELECT productid, orderid SELECT productid
,quantity ,SUM(quantity) AS total_quantity
FROM orderhist FROM orderhist
GO GROUP BY productid
GO
productid orderid quantity productid total_quantity
1 1 5 1 15
1 1 10 2 35
Only rows that
2 1 10 satisfy the 3 45
WHERE clause
2 2 25 are grouped
productid total_quantity
3 1 15
2 35
3 2 30
USE northwind
SELECT productid
,SUM(quantity) AS total_quantity
FROM orderhist
WHERE productid = 2
GROUP BY productid
GO
Using the GROUP BY Clause with the
HAVING Clause
USE northwind USE northwind
SELECT productid, orderid SELECT productid, SUM(quantity)
,quantity AS total_quantity
FROM orderhist FROM orderhist
GO GROUP BY productid
HAVING SUM(quantity)>=30
GO
productid orderid quantity
1 1 5
1 1 10 productid total_quantity
2 1 10 2 35
2 2 25 3 45
3 1 15
3 2 30
Generating Aggregate Values
Within Result Sets
Using the GROUP BY Clause with the
ROLLUP Operator
Using the GROUP BY Clause with the
CUBE Operator
Using the GROUPING Function
Using the GROUP BY Clause with the
ROLLUP Operator
USE northwind
SELECT productid, orderid, SUM(quantity) AS total_quantity
FROM orderhist
GROUP BY productid, orderid
WITH ROLLUP
ORDER BY productid, orderid
GO
productid orderid total_quantity Description
NULL NULL 95
Grand total
1 NULL 15
Summarizes only rows for productid 1
1 1 5
Detail value for productid 1, orderid 1
1 2 10
Detail value for productid 1, orderid 2
2 NULL 35
Summarizes only rows for productid 2
2 1 10
2 2 25 Detail value for productid 2, orderid 1
3 NULL 45 Summarizes only rows for productid 3
3 1 15 Detail value for productid 3, orderid 1
3 2 30 Detail value for productid 3, orderid 2
Using the GROUP BY Clause with the
CUBE Operator
USE northwind
SELECT productid, orderid, SUM(quantity) AS total_quantity
FROM orderhist
GROUP BY productid, orderid
WITH CUBE
ORDER BY productid, orderid
GO
productid orderid total_quantity Description
NULL NULL 95 Grand total
NULL 1 30 Summarizes all rows for orderid 1
The CUBE operator
NULL 2 65 Summarizes all rows for orderid 2
produces two
more summary 1 NULL 15 Summarizes only rows for productid 1
values than the 1 1 5 Detail value for productid 1, orderid 1
ROLLUP operator 1 2 10 Detail value for productid 1, orderid 2
2 NULL 35 Summarizes only rows for productid 2
2 1 10 Detail value for productid 2, orderid 1
2 2 25 Detail value for productid 2, orderid 2
3 NULL 45 Summarizes only rows for productid 3
3 1 15 Detail value for productid 3, orderid 1
3 2 30 Detail value for productid 3, orderid 2
Using the GROUPING Function
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
productid orderid total_quantity
NULL 1 NULL 1 95
NULL 1 1 0 30
NULL 1 2 0 65
1 represents summary values 1 0 NULL 1 15
in the preceding column 1 0 1 0 5
1 0 2 0 10
0 represents detail values in
2 0 NULL 1 35
the preceding column 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
Using the COMPUTE and COMPUTE
BY Clauses
COMPUTE COMPUTE BY
USE northwind USE northwind
SELECT productid, orderid SELECT productid, orderid, quantity
,quantity FROM orderhist
FROM orderhist ORDER BY productid, orderid
ORDER BY productid, orderid COMPUTE SUM(quantity) BY productid
COMPUTE SUM(quantity) COMPUTE SUM(quantity)
GO GO
productid orderid quantity
productid orderid quantity 1 1 5
1 1 5 1 2 10
1 2 10 sum 15
2 1 10 2 1 10
2 2 25 2 2 25
3 1 15 sum 35
3 2 30 3 1 15
sum 95 3 2 30
sum 45
sum 95
Recommended Practices
Index Frequently Aggregated Columns
Avoid Using Aggregate Functions with Null Values
Use the ORDER BY Clause to Guarantee a Sort Order
Use the ROLLUP Operator Instead of the CUBE Operato
Avoid Using the COMPUTE or COMPUTE BY Clause
Lab A: Grouping and Summarizing
Data
Review
Listing the TOP n Values
Using Aggregate Functions
GROUP BY Fundamentals
Generating Aggregate Values Within
Result Sets
Using the COMPUTE and COMPUTE BY
Clauses