SQLの基本:GROUPBY句とHAVING句でデータを集計・絞り込む

パパリーマンのIT開拓記

こんにちは、パパリーマンのこっしーです。いつもありがとうございます。

前回の記事では、SELECT文の基本構文や複数テーブルの結合、WHERE句を使用した条件指定について解説しました。今回はさらに進んで、データを集計するためのGROUP BY句と、集計結果を絞り込むHAVING句について学びます。


目次

GROUP BY句とは?

GROUP BY句は、データを特定のカラムごとにグループ化し、グループごとに集計処理を行うために使用されます。例えば、売上データを「地域ごとの売上合計」や「月ごとの平均売上」といった形で集計できます。

集計関数の種類とその内容

GROUP BY句と一緒に使われる主な集計関数には以下のものがあります:

集計関数説明使用例
SUM()合計を計算売上の合計を計算する
AVG()平均値を計算商品の平均価格を計算する
COUNT()レコードの件数をカウント顧客の数を数える
MAX()最大値を取得最も高い売上額を取得する
MIN()最小値を取得最も安い商品価格を取得する

基本構文

SELECT カラム名, 集計関数(カラム名)
FROM テーブル名
GROUP BY カラム名;

実例

以下の「sales」テーブルを例に考えます。

地域商品売上額
東京商品A1000
東京商品B2000
大阪商品A1500
大阪商品C2500
福岡商品A1200

地域ごとの売上合計を計算する場合:

SELECT 地域, SUM(売上額) AS 合計売上
FROM sales
GROUP BY 地域;

結果は以下の通りです:

地域合計売上
東京3000
大阪4000
福岡1200

DISTINCTがGROUP BYと一緒に使えない理由

DISTINCTは重複するデータを排除するために使用されますが、GROUP BYと一緒には使用できません。その理由は、GROUP BY自体がデータをグループ化し、各グループごとに1つの集計結果を返すため、DISTINCTが不要になるからです。

例示

以下の「sales」テーブルを使用します。

地域商品売上額
東京商品A1000
東京商品A1000

DISTINCTを使う場合:

SELECT DISTINCT 地域, 商品
FROM sales;

結果:

地域商品
東京商品A

GROUP BYを使う場合:

SELECT 地域, 商品, SUM(売上額) AS 合計売上
FROM sales
GROUP BY 地域, 商品;

結果:

地域商品合計売上
東京商品A2000

DISTINCTとGROUP BYの目的が異なるため、同時に使うことはありません。


HAVING句とは?

HAVING句は、GROUP BY句で集計した結果に条件を適用するために使用されます。WHERE句がレコード単位で条件を適用するのに対し、HAVING句は集計結果に対して条件を指定します。

WHEREとHAVINGの違い

条件句適用対象使用可能な条件
WHERE個々のレコードすべてのカラム
HAVINGGROUP BYの集計結果集計関数を含む条件

実例

次の「sales」テーブルを使用します。

地域商品売上額
東京商品A1000
東京商品B2000
大阪商品A1500
大阪商品C2500
福岡商品A1200
  1. 売上額が1500以上のレコードのみを抽出(WHERE句):
SELECT 地域, 商品, 売上額
FROM sales
WHERE 売上額 >= 1500;

結果:

地域商品売上額
東京商品B2000
大阪商品A1500
大阪商品C2500
  1. 地域ごとの合計売上が3000以上のデータを抽出(HAVING句):
SELECT 地域, SUM(売上額) AS 合計売上
FROM sales
GROUP BY 地域
HAVING SUM(売上額) >= 3000;

結果:

地域合計売上
東京3000
大阪4000

おわりに

GROUP BY句とHAVING句を使用すれば、データを簡単に集計・分析できます。WHERE句とHAVING句の使い分けをマスターすることで、より柔軟なクエリが書けるようになります。次回は、ウィンドウ関数を使った高度な集計について解説します!

ぜひ、この知識を実務に役立ててください!

ここまでお読みいただきありがとうございます。
それでは次の記事でお会いしましょう!ばいばいっ!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次