GROUP BY(HAVING句)とWINDOW関数の違いについて

はじめに

SQLでデータ分析を始めるとき、集計といえばまず GROUP BY を使います。しかし、次のような高度な分析をしようとしたとき、GROUP BY が壁になります。

  1. 各社員の売上が、部門全体の合計に対して何パーセントか知りたい。
  2. 地域ごとの売上順位を、元の売上データと同時に一覧表示したい。

これらの分析には、GROUP BY では不可能です。なぜなら、GROUP BY は分析に必要な元の詳細な行の情報を失ってしまうからです。この問題を解決するのが ウィンドウ関数です。

GROUP BYとは?

GROUP BY 句は、複数の行を特定の列(例: region)でグループ化し、そのグループに対して集約関数(SUM, AVG, COUNTなど)を適用して一行にまとめる機能です。

  • 役割: データを「要約」すること。
  • 特徴: 元の行の情報(個別データ)は失われ、集約された結果(例: 地域ごとの合計値)のみが残ります。

HAVING句とは?

HAVING 句は、GROUP BY によって集約されたグループに対して条件を適用し、フィルタリングを行うために使われます。

例: 「合計売上が1000以上の地域」のみを抽出する。

WINDOW関数とは?

ウィンドウ関数は、OVER 句で定義された行の集合(ウィンドウ)に対して計算を行います。その計算結果は、元の各行に新しい列として付加されます

  • 役割: データを「分析」し、元の行と比較・評価をすること。
  • 特徴: 元の行数は維持されます。集計結果は、元の詳細なデータと並べて表示されます。
  • 構文: ウィンドウ関数は必ずOVER句を伴います。

まとめ

GROUP BY とウィンドウ関数の使い分けはシンプルです。

  1. 行数を減らしてデータを要約したい場合▶︎GROUP BY
  2. 元の行を残したまま、グループ全体や前後の行と比較・分析したい場合▶︎ウィンドウ関数

ウィンドウ関数を使いこなせば、一度のクエリで詳細データと集約データの両方を扱うことができ、データ分析の幅が格段に広がります。

ありがとうございました✨

タイトルとURLをコピーしました