GROUP BY句とは?
GROUP BY
句は、データを特定の列の値に基づいてグループ化するために使用されます。
この句を使用することで、同じ値を持つ行を一つのグループとしてまとめ、そのグループごとに集計を行うことができます。
例えば、次のようなテーブルがあるとします。
| 顧客ID | 購入金額 | 商品カテゴリ |
|--------|----------|--------------|
| 1 | 1000 | 食品 |
| 2 | 2000 | 衣料品 |
| 1 | 1500 | 衣料品 |
| 3 | 500 | 食品 |
| 2 | 3000 | 食品 |
このデータをもとに、商品カテゴリ
ごとの合計購入金額を求めたい場合、GROUP BY
句を使用します。
SELECT 商品カテゴリ, SUM(購入金額) AS 合計購入金額
FROM 購入履歴
GROUP BY 商品カテゴリ;
結果は以下のようになります。
商品カテゴリ | 合計購入金額 |
|--------------|--------------|
| 食品 | 4500 |
| 衣料品 | 3500 |
HAVING句とは?
HAVING
句は、GROUP BY
句によってグループ化されたデータに対して、特定の条件を設定するために使用されます。
HAVING
句はWHERE
句と似ていますが、WHERE
句が個々の行に対して条件を設定するのに対し、HAVING
句はグループに対して条件を設定します。
例えば、上記の例で、合計購入金額が4,000円以上のカテゴリだけを表示したい場合、HAVING
句を使用します。
SELECT 商品カテゴリ, SUM(購入金額) AS 合計購入金額
FROM 購入履歴
GROUP BY 商品カテゴリ
HAVING SUM(購入金額) >= 4000;
結果は以下のようになります。
| 商品カテゴリ | 合計購入金額 |
|--------------|--------------|
| 食品 | 4500 |
GROUP BYとHAVINGの組合せ
GROUP BY
とHAVING
を組み合わせることで、データのグループ化とそのグループごとの条件設定を同時に行うことができます。
これにより、特定の基準を満たすグループだけを効率的に抽出することができます。
例えば、各顧客の合計購入金額を求め、その合計が2000円以上の顧客だけを抽出するには、以下のSQLクエリを使用します。
SELECT 顧客ID, SUM(購入金額) AS 合計購入金額
FROM 購入履歴
GROUP BY 顧客ID
HAVING SUM(購入金額) >= 2000;
このクエリにより、2000円以上購入した顧客のリストを取得することができます。
まとめ
GROUP BY
句とHAVING
句は、SQLを使用してデータを集計し、特定の条件に合致するグループを抽出するために利用できます。