SQL
GROUP BY
statement
Aggregate functions often need to add GROUP BY statements.
GROUP BY statements are typically used with collection functions (COUNT, MAX, MIN, SUM, AVG) to group the result sets by one or more columns.
GROUP BY statement
The GROUP BY statement is used to group the result set based on one or more columns in conjunction with the Aggregate function.
SQL GROUP BY syntax
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);
Demonstrate the database
In this tutorial, we'll use the well-known Northwind sample database.
Here's the data from the "Customers" table:
CustomerID
|
CustomerName
|
ContactName
|
Address
|
City
|
PostalCode
|
Country
|
1
|
Alfreds Futterkiste
|
Maria Anders
|
Obere Str. 57
|
Berlin
|
12209
|
Germany
|
2
|
Ana Trujillo Emparedados y helados
|
Ana Trujillo
|
Avda.
de la Constitución 2222
|
México D.F.
|
05021
|
Mexico
|
3
|
Antonio Moreno Taquería
|
Antonio Moreno
|
Mataderos 2312
|
México D.F.
|
05023
|
Mexico
|
4
|
Around the Horn
|
Thomas Hardy
|
120 Hanover Sq.
|
London
|
WA1 1DP
|
UK
|
5
|
Berglunds snabbköp
|
Christina Berglund
|
Berguvsvägen 8
|
Luleå
|
S-958 22
|
Sweden
|
SQL GROUP BY example
The following SQL statement lists the number of customers for each country:
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country;
The following SQL statement lists the number of customers in each country, sorted from highest to thyst:
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
ORDER BY COUNT(CustomerID) DESC;
Demonstrate the database
Here's an option for the Order table in the Rosevin sample database:
OrderID
|
CustomerID
|
EmployeeID
|
OrderDate
|
ShipperID
|
10248
|
90
|
5
|
1996-07-04
|
3
|
10249
|
81
|
6
|
1996-07-05
|
1
|
10250
|
34
|
4
|
1996-07-08
|
2
|
And select from the Shippers table:
ShipperID
|
ShipperName
|
1
|
Speedy Express
|
2
|
United Package
|
3
|
Federal Shipping
|
GROUP BY uses the JOIN example
The following SQL statement lists the number of orders sent by each shipper:
SELECT Shippers.ShipperName, COUNT(Orders.OrderID) AS NumberOfOrders FROM Orders
LEFT JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID
GROUP BY ShipperName;