SQL 速習チュートリアル

SQL GROUP BY 句

1. SQL GROUP BY 句

GROUP BY 句は、同じ値を持つ行を「各国の顧客数を取得する」といったサマリー行(要約された行)にグループ化するために使用されます。

GROUP BY 句は、各グループに対して計算を実行するために、ほとんどの場合 COUNT()MAX()MIN()SUM()AVG() などの集約関数(Aggregate Functions)と組み合わせて使用されます。

1.1 GROUP BY の構文

SELECT カラム1, 集約関数(カラム2), カラム3, ...
FROM テーブル名
WHERE 条件
GROUP BY カラム1, カラム3
ORDER BY カラム名;

2. デモ用データベース

以下は、Northwind サンプルデータベースの「Customers(顧客)」テーブルからの抜粋です。

CustomerIDCustomerName ContactName AddressCityPostalCode Country
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

3. SQL GROUP BY の使用例

次の SQL は、国ごとの顧客数を返します。

実行例:

SELECT Country, COUNT(CustomerID) AS [顧客数]
FROM Customers
GROUP BY Country;

次の SQL は、国ごとの顧客数を取得し、件数の多い順(降順)にソートして返します。

実行例:

SELECT Country, COUNT(CustomerID) AS [顧客数]
FROM Customers
GROUP BY Country
ORDER BY COUNT(CustomerID) DESC;

4. デモ用データベース(Orders & Shippers)

以下は、Northwind サンプルデータベースの「Orders(注文)」テーブルからの抜粋です。

OrderIDCustomerID EmployeeID OrderDate ShipperID
102489051996-07-043
102498161996-07-051
102503441996-07-082

こちらは「Shippers(配送業者)」テーブルの抜粋です。

ShipperID ShipperName
1Speedy Express
2United Package
3Federal Shipping

5. JOIN を使用した GROUP BY の例

次の SQL は、配送業者(Shipper)ごとに送られた注文の総数を返します。

実行例:

SELECT Shippers.ShipperName, COUNT(Orders.OrderID) AS 注文数
FROM Orders
LEFT JOIN Shippers
ON Orders.ShipperID = Shippers.ShipperID
GROUP BY ShipperName;