SQLのGROUP BY句とは?意味をわかりやすく簡単に解説
スポンサーリンク
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で確認しておりますが、間違い等ある場合はコメントよりご連絡いただけますと幸いです。
- EmEditor最新版にAI機能が統合、チャットやプロンプト定義で利便性向上、正規表現でのファイル検索も
- DevToys v2.0がWindows・macOS・Linuxに対応、拡張機能とコマンドラインアプリも追加
- 富士電機のTellus Lite V-Simulatorに複数の脆弱性、任意コード実行のリスクありアップデートを
- Chrome126リリース、View Transitions APIやCloseWatcher APIなど機能が充実
- MicrosoftがGPT Builderの提供終了を発表 Copilot ProのGPT機能にも影響、全データ削除へ
- CopilotがクラシックOutlook for Windowsに登場、他のプラットフォームに順次展開へ
- Stability AIが最先端の画像生成AI「Stable Diffusion 3 Medium」をオープンソースで公開、商用利用も可能に
- オンライン教育でIoT工作を実現、obnizとNEST LAB.が新教材でものづくりの可能性を拡大
- Google Workspace UpdatesでSlidesやMeet、Sheets、Chatの新機能が追加、利便性の向上に期待
- Google Driveに7日間未閲覧の共有ファイルのの自動通知機能が追加、メールでお知らせ可能に
スポンサーリンク