SQLのGROUP BY句とは?意味をわかりやすく簡単に解説

text: XEXEQ編集部


GROUP BY句とは

GROUP BY句はSQLにおいて結果セットを特定の列でグループ化するための句です。GROUP BY句を使用することで、指定した列の値が同じレコードをグループ化し、集約関数を使用して各グループの集計値を算出できます。

例えば、売上データを商品カテゴリごとに集計する場合、GROUP BY句を使用して商品カテゴリ列でグループ化し、SUM関数で売上金額の合計を計算できます。GROUP BY句はデータの要約や分析に欠かせない機能といえます。

GROUP BY句を使用する際はSELECT句で指定する列はGROUP BY句で指定した列か集約関数を使用した式でなければなりません。また、GROUP BY句はWHERE句の後、ORDER BY句の前に記述します。

GROUP BY句を使用したクエリの結果はグループ化された列の値ごとに1つのレコードが返されます。これにより、データを要約し、グループレベルでの分析を行うことができます。

GROUP BY句は大量のデータを扱う際に非常に有用です。適切に使用することで、効率的にデータを集計し、意思決定に必要な情報を得ることができます。GROUP BY句を理解し、活用することはSQLを使用したデータ分析において重要なスキルといえます。

GROUP BY句の使用方法と注意点

「GROUP BY句の使用方法と注意点」に関して、以下3つを簡単に解説していきます。

  • GROUP BY句の基本的な使用方法
  • GROUP BY句とWHERE句の組み合わせ
  • GROUP BY句とHAVING句の組み合わせ

GROUP BY句の基本的な使用方法

GROUP BY句の基本的な使用方法はSELECT句でグループ化する列と集約関数を指定し、GROUP BY句でグループ化する列を指定することです。これにより、指定した列の値が同じレコードがグループ化され、各グループの集計値が算出されます。

例えば、以下のようなクエリで、商品カテゴリごとの売上金額の合計を求めることができます。


SELECT category, SUM(sales) AS total_sales
FROM sales_data
GROUP BY category;

GROUP BY句とWHERE句の組み合わせ

GROUP BY句とWHERE句を組み合わせることで、グループ化する前にレコードを絞り込むことができます。WHERE句でレコードを絞り込んだ後、GROUP BY句でグループ化し、集計を行います。

例えば、以下のクエリでは商品カテゴリが「A」または「B」の売上データを対象に、商品カテゴリごとの売上金額の合計を求めています。


SELECT category, SUM(sales) AS total_sales
FROM sales_data
WHERE category IN ('A', 'B')
GROUP BY category;

GROUP BY句とHAVING句の組み合わせ

GROUP BY句とHAVING句を組み合わせることで、グループ化した後の結果に条件を設定できます。HAVING句は集約関数を使用した条件を指定し、条件を満たすグループのみを結果に含めます。

例えば、以下のクエリでは商品カテゴリごとの売上金額の合計が1000以上のグループのみを結果に含めています。


SELECT category, SUM(sales) AS total_sales
FROM sales_data
GROUP BY category
HAVING SUM(sales) >= 1000;

GROUP BY句を使用した集計関数の活用

「GROUP BY句を使用した集計関数の活用」に関して、以下3つを簡単に解説していきます。

  • COUNT関数とGROUP BY句の組み合わせ
  • AVG関数とGROUP BY句の組み合わせ
  • MAX・MIN関数とGROUP BY句の組み合わせ

COUNT関数とGROUP BY句の組み合わせ

COUNT関数はグループ内のレコード数を数えるための関数です。GROUP BY句と組み合わせることで、各グループのレコード数を求めることができます。

例えば、以下のクエリでは商品カテゴリごとの売上データの件数を求めています。


SELECT category, COUNT(*) AS count
FROM sales_data
GROUP BY category;

AVG関数とGROUP BY句の組み合わせ

AVG関数はグループ内の値の平均を計算するための関数です。GROUP BY句と組み合わせることで、各グループの平均値を求めることができます。

例えば、以下のクエリでは商品カテゴリごとの売上金額の平均を求めています。


SELECT category, AVG(sales) AS avg_sales
FROM sales_data
GROUP BY category;

MAX・MIN関数とGROUP BY句の組み合わせ

MAX関数とMIN関数はそれぞれグループ内の最大値と最小値を求めるための関数です。GROUP BY句と組み合わせることで、各グループの最大値と最小値を求めることができます。

例えば、以下のクエリでは商品カテゴリごとの売上金額の最大値と最小値を求めています。


SELECT category, MAX(sales) AS max_sales, MIN(sales) AS min_sales
FROM sales_data
GROUP BY category;

GROUP BY句を使用した応用的なクエリ

「GROUP BY句を使用した応用的なクエリ」に関して、以下3つを簡単に解説していきます。

  • GROUP BY句とサブクエリの組み合わせ
  • 複数列でのGROUP BY句の使用
  • GROUP BY句とROLLUP・CUBE句の使用

GROUP BY句とサブクエリの組み合わせ

GROUP BY句とサブクエリを組み合わせることで、より柔軟性の高い集計が可能になります。例えば、グループごとの集計結果をさらに絞り込んだり、集計結果を他のテーブルと結合したりすることができます。

以下のクエリでは商品カテゴリごとの売上金額の合計を求め、その結果を元に、売上金額の合計が1000以上のカテゴリ名を取得しています。


SELECT category
FROM (
  SELECT category, SUM(sales) AS total_sales
  FROM sales_data
  GROUP BY category
) AS category_sales
WHERE total_sales >= 1000;

複数列でのGROUP BY句の使用

GROUP BY句で複数の列を指定することで、より詳細なグループ化が可能になります。この場合、指定した列の組み合わせが同じレコードがグループ化されます。

例えば、以下のクエリでは商品カテゴリと販売地域の組み合わせごとの売上金額の合計を求めています。


SELECT category, region, SUM(sales) AS total_sales
FROM sales_data
GROUP BY category, region;

GROUP BY句とROLLUP・CUBE句の使用

ROLLUP句とCUBE句はGROUP BY句と一緒に使用することで、複数レベルでの集計を一度に行うことができます。ROLLUP句は階層的な集計を、CUBE句はすべての組み合わせでの集計を行います。

以下のクエリではROLLUP句を使用して、商品カテゴリと販売地域のレベルで売上金額の合計を求めています。


SELECT category, region, SUM(sales) AS total_sales
FROM sales_data
GROUP BY ROLLUP(category, region);

※上記コンテンツはAIで確認しておりますが、間違い等ある場合はコメントよりご連絡いただけますと幸いです。

「プログラミング」に関するコラム一覧「プログラミング」に関するニュース一覧
ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。