SQLでデータ分析!Window関数でデータの分析・集計をもっと柔軟に!

Window関数

こんにちは、リーマンパパのこっしーです!
前回の記事では、「GROUP BY句」と「HAVING句」を使ったデータ集計の基本を解説しました(未読の方はぜひこちらをご覧ください!)。
今回の記事では、その続きとして、SQLのWindow関数に焦点を当てます。Window関数を使えば、GROUP BY句では実現できない柔軟なデータ分析が可能になります。


目次

Window関数とは?

Window関数は、SQLでデータを「特定の範囲(ウィンドウ)」に対して集計や計算を行う際に使われる機能です。GROUP BY句ではデータをグループ化した後に集計結果を返しますが、Window関数はグループ化せず、行ごとの詳細情報を保持したまま計算を行えるのが特徴です。

主なメリット

  • グループ化せずに計算できる: 明細データを残したまま、集計値を計算できる。
  • 柔軟な範囲指定: 例えば、前後の数行や全体の平均を計算可能。
  • 複数の集計基準を併用可能: GROUP BY句と違い、1つのクエリで異なる基準の集計を取得できる。

基本構文

Window関数を使うには、集計関数に「OVER句」を付けて使用します。

SELECT カラム名, 集計関数() OVER (PARTITION BY カラム名 ORDER BY カラム名) AS 別名
FROM テーブル名;

`

  • PARTITION BY: データをどのようにグループ分けするか指定。
  • ORDER BY: グループ内での並び順を指定。
  • OVER: Window関数の範囲を定義。

実例:Window関数の使い方

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

地域商品売上額日付
東京商品A10002025-01-01
東京商品B20002025-01-02
大阪商品A15002025-01-01
大阪商品C25002025-01-02
福岡商品A12002025-01-01

1. 各行ごとの売上合計と割合

まず、全体の売上合計と、各行の売上割合を計算します。

SELECT 地域, 商品, 売上額,
       SUM(売上額) OVER () AS 全体売上,
       (売上額 * 1.0 / SUM(売上額) OVER ()) AS 売上割合
FROM sales;

結果:

地域商品売上額全体売上売上割合
東京商品A100082000.122
東京商品B200082000.244
大阪商品A150082000.183
大阪商品C250082000.305
福岡商品A120082000.146

2. 地域ごとの累積売上

地域ごとに売上を日付順に累積してみましょう。

SELECT 地域, 日付, 売上額,
       SUM(売上額) OVER (PARTITION BY 地域 ORDER BY 日付) AS 累積売上
FROM sales;

結果:

地域日付売上額累積売上
東京2025-01-0110001000
東京2025-01-0220003000
大阪2025-01-0115001500
大阪2025-01-0225004000
福岡2025-01-0112001200

3. 順位付け(RANK関数)

Window関数を使うと、データに順位を付けることも簡単です。

SELECT 地域, 商品, 売上額,
       RANK() OVER (ORDER BY 売上額 DESC) AS 売上順位
FROM sales;

結果:

地域商品売上額売上順位
大阪商品C25001
東京商品B20002
大阪商品A15003
福岡商品A12004
東京商品A10005

GROUP BY句との違い

機能GROUP BY句Window関数
データの詳細行削除される保持される
複数集計不可能可能
結果の柔軟性低い高い

GROUP BY句は特定の集計値のみ必要な場合に便利ですが、Window関数は詳細なデータ分析を求める場面で威力を発揮します。

おわりに

Window関数はSQLの中でも非常に強力な機能で、データ分析の可能性を広げてくれます。最初は少し難しいかもしれませんが、実際に手を動かしてみると理解が深まるはずです!

次回は、Window関数を使ったさらに複雑な応用例や、実務で役立つテクニックについて紹介する予定です。お楽しみに!

最後までお読みいただき、ありがとうございました。

それではまた、次の記事でお会いしましょう!ばいばいっ!

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

コメント

コメントする

CAPTCHA


目次