0Pricing
SQL Academy · レッスン

単一列・複数列のGROUP BY

1つ以上の列で行をグループ化して小計やカテゴリ別の内訳を作成し、GROUP BYクエリの実行計画を読み取ります。

「単一列・複数列のGROUP BY」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。

GROUP BYの役割

GROUP BYは、1つ以上の列の値に基づいて行をグループに分け、そのグループごとに集約関数を適用します。

単一列によるグループ化

ユーザーごとの注文総数:

SELECT user_id, COUNT(*) AS order_count, SUM(total) AS revenue
FROM orders
GROUP BY user_id
ORDER BY revenue DESC;

複数列によるグループ化

カテゴリと国によるサブグループ:

SELECT country, category, SUM(total) AS revenue
FROM orders o
JOIN products p ON p.id = o.product_id
JOIN users   u ON u.id = o.user_id
GROUP BY country, category
ORDER BY country, revenue DESC;

SELECTで指定するすべての列はグループ化または集約が必要

標準SQLのルール:

-- WRONG — email is neither grouped nor aggregated:
SELECT user_id, email, COUNT(*)
FROM orders
GROUP BY user_id;     -- ERROR

-- RIGHT — group by both, or use an aggregate:
SELECT user_id, MAX(email) AS email, COUNT(*)
FROM orders
GROUP BY user_id;

式によるGROUP BY

式の結果(例:月単位の区分)でグループ化します:

SELECT date_trunc('month', created_at) AS month, SUM(total)
FROM orders
GROUP BY date_trunc('month', created_at)
ORDER BY month;

位置またはエイリアスによるGROUP BY

SELECTリストの位置またはエイリアスでグループ化できます(PostgreSQL):

SELECT date_trunc('month', created_at) AS month, SUM(total)
FROM orders
GROUP BY month             -- alias
ORDER BY 1;                -- position

Grouping Sets、ROLLUP、CUBE

1つのクエリで複数のグループ化を計算できます。小計の作成に最適です:

SELECT country, category, SUM(total)
FROM orders o JOIN ...
GROUP BY ROLLUP (country, category);

-- Returns:  per (country, category),  per country,  grand total

空のグループは存在しない

GROUP BYは、少なくとも1行が存在するグループだけを返します。注文数が0のカテゴリも含め、すべてのカテゴリを取得したい場合は、マスターリストからLEFT JOINして集約します。

GROUP BYとインデックス

プランナーは、ハッシュ集約(グループのハッシュテーブルを作成)またはソートしてからグループ化する方法を使用することがあります。グループ化する列にインデックスがあると、後者の方法を高速化できます。

ウィンドウ関数とGROUP BY

GROUP BYは行をまとめます。ウィンドウ関数はすべての行を保持したまま、集約列を追加します。適切な方法を選択してください。詳しくは「ウィンドウ関数の詳細」で説明します。

HAVINGとWHEREにおけるエイリアス

論理的な順序は FROM → WHERE → GROUP BY → HAVING → SELECT です。WHEREから集約結果は参照できませんが、HAVINGからは参照できます。

まとめ

GROUP BYはレポート作成の主役です。

  • SELECTで指定するすべての列は、グループ化するか集約する必要があります
  • 列、式、またはエイリアスでグループ化します
  • クロス集計にはROLLUP/CUBE/GROUPING SETSを使用します

確認問題

GROUP BY countryクエリで、SELECTリストに、集約もグループ化もされていないcity列を含めることはできますか?

よくある質問

「単一列・複数列のGROUP BY」レッスンは無料ですか?

はい。「単一列・複数列のGROUP BY」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。

「単一列・複数列のGROUP BY」で何を学びますか?

1つ以上の列で行をグループ化して小計やカテゴリ別の内訳を作成し、GROUP BYクエリの実行計画を読み取ります。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

SQL Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「単一列・複数列のGROUP BY」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSQL Academyレッスンでコードを書いて実行できますか?

はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. COUNT、SUM、AVG、MIN、MAX
  2. 単一列・複数列のGROUP BY
  3. HAVINGとWHEREの違い
  4. よくある落とし穴:集約におけるNULL
← SQL Academyに戻る