前回の記事では、SELECT文の基本構文や複数テーブルの結合、WHERE句を使用した条件指定について解説しました。今回はさらに進んで、データを集計するためのGROUP BY句と、集計結果を絞り込むHAVING句について学びます。
GROUP BY句とは?
GROUP BY句は、データを特定のカラムごとにグループ化し、グループごとに集計処理を行うために使用されます。例えば、売上データを「地域ごとの売上合計」や「月ごとの平均売上」といった形で集計できます。
集計関数の種類とその内容
GROUP BY句と一緒に使われる主な集計関数には以下のものがあります:
集計関数 | 説明 | 使用例 |
---|---|---|
SUM() | 合計を計算 | 売上の合計を計算する |
AVG() | 平均値を計算 | 商品の平均価格を計算する |
COUNT() | レコードの件数をカウント | 顧客の数を数える |
MAX() | 最大値を取得 | 最も高い売上額を取得する |
MIN() | 最小値を取得 | 最も安い商品価格を取得する |
基本構文
SELECT カラム名, 集計関数(カラム名)
FROM テーブル名
GROUP BY カラム名;
実例
以下の「sales」テーブルを例に考えます。
地域 | 商品 | 売上額 |
---|---|---|
東京 | 商品A | 1000 |
東京 | 商品B | 2000 |
大阪 | 商品A | 1500 |
大阪 | 商品C | 2500 |
福岡 | 商品A | 1200 |
地域ごとの売上合計を計算する場合:
SELECT 地域, SUM(売上額) AS 合計売上
FROM sales
GROUP BY 地域;
結果は以下の通りです:
地域 | 合計売上 |
---|---|
東京 | 3000 |
大阪 | 4000 |
福岡 | 1200 |
DISTINCTがGROUP BYと一緒に使えない理由
DISTINCTは重複するデータを排除するために使用されますが、GROUP BYと一緒には使用できません。その理由は、GROUP BY自体がデータをグループ化し、各グループごとに1つの集計結果を返すため、DISTINCTが不要になるからです。
例示
以下の「sales」テーブルを使用します。
地域 | 商品 | 売上額 |
---|---|---|
東京 | 商品A | 1000 |
東京 | 商品A | 1000 |
DISTINCTを使う場合:
SELECT DISTINCT 地域, 商品
FROM sales;
結果:
地域 | 商品 |
---|---|
東京 | 商品A |
GROUP BYを使う場合:
SELECT 地域, 商品, SUM(売上額) AS 合計売上
FROM sales
GROUP BY 地域, 商品;
結果:
地域 | 商品 | 合計売上 |
---|---|---|
東京 | 商品A | 2000 |
DISTINCTとGROUP BYの目的が異なるため、同時に使うことはありません。
HAVING句とは?
HAVING句は、GROUP BY句で集計した結果に条件を適用するために使用されます。WHERE句がレコード単位で条件を適用するのに対し、HAVING句は集計結果に対して条件を指定します。
WHEREとHAVINGの違い
条件句 | 適用対象 | 使用可能な条件 |
---|---|---|
WHERE | 個々のレコード | すべてのカラム |
HAVING | GROUP BYの集計結果 | 集計関数を含む条件 |
実例
次の「sales」テーブルを使用します。
地域 | 商品 | 売上額 |
---|---|---|
東京 | 商品A | 1000 |
東京 | 商品B | 2000 |
大阪 | 商品A | 1500 |
大阪 | 商品C | 2500 |
福岡 | 商品A | 1200 |
- 売上額が1500以上のレコードのみを抽出(WHERE句):
SELECT 地域, 商品, 売上額
FROM sales
WHERE 売上額 >= 1500;
結果:
地域 | 商品 | 売上額 |
---|---|---|
東京 | 商品B | 2000 |
大阪 | 商品A | 1500 |
大阪 | 商品C | 2500 |
- 地域ごとの合計売上が3000以上のデータを抽出(HAVING句):
SELECT 地域, SUM(売上額) AS 合計売上
FROM sales
GROUP BY 地域
HAVING SUM(売上額) >= 3000;
結果:
地域 | 合計売上 |
---|---|
東京 | 3000 |
大阪 | 4000 |
おわりに
GROUP BY句とHAVING句を使用すれば、データを簡単に集計・分析できます。WHERE句とHAVING句の使い分けをマスターすることで、より柔軟なクエリが書けるようになります。
ぜひ、この知識を実務に役立ててください!
それではまた次の記事でお会いしましょう。ばいばいっ!
コメント