【SQL入門】ウィンドウ関数の使い方

ウィンドウ関数でできること

ウィンドウ関数とは、分析する際の関数として非常に便利です。
主に、ランキングや連番を付与することが可能です。

ウィンドウ関数を使ってみる

早速、具体例を用いて説明していきましょう。

参考文献

入門者の方に非常におすすめの本になります。
わかりやすい解説から、練習問題までたくさん用意されているので、
SQLの習得に有用ではないかと思います。

スッキリわかるSQL入門 第2版 ドリル222問付き! (スッキリシリーズ)

スッキリわかるSQL入門 第2版 ドリル222問付き! (スッキリシリーズ)

サンプルテーブル

このように、社員の所属部署と年齢が格納されたテーブルを利用します。

名前 部署 年齢
田中 営業 31
佐藤 経理 40
鈴木 総務 24
高橋 営業 20
棚橋 総務 30
中村 営業 55
清水 総務 29

RANK関数

RANK関数を用いて、部署ごとに年齢のランクを付けましょう。

SELECT
    名前,
    部署,
    年齢,
    RANK () over (partition by 部署 order by 部署) as ランク
FROM
    社員マスター

実行結果

名前 部署 年齢 ランク
高橋 営業 20 1
田中 営業 31 2
中村 営業 55 3
佐藤 経理 40 1
鈴木 総務 24 1
清水 総務 29 2
棚橋 総務 30 3

このように、部署ごとに年齢の若いランクが表示されました。
ウィンドウ関数を用いると、特定の値をもとに処理をすることが可能です。

PARTITION BYとは?

ウィンドウ関数を利用する際に、重要となるのがPARTION BYです。
先程のクエリの中で利用されておりましたが、PARTION BYは順位をつける範囲を指定します。

社員マスターテーブルの場合は、部署が順位をつける範囲になりました。

ORDER BYとの違い

ORDER BYは、処理されたテーブル全体に対して、特定の値でソートしてくれます。

社員マスターの年齢をORDER BYでソートした場合

SELECT
    名前,
    部署,
    年齢
FROM
    社員マスター
ORDER BY
    年齢

実行結果

名前 部署 年齢
高橋 営業 20
鈴木 総務 24
清水 総務 29
田中 営業 31
棚橋 総務 30
佐藤 経理 40
中村 営業 55

このように、テーブル全体を通して年齢でソートされます。

一方で、PARTITION BYは先程の例でも示した通り、
指定した値をもとに、ソートしてくれます。

ROW_NUMBERの使い方

ウィンドウ関数の説明としてROW関数を使いました。
次も、ウィンドウ関数でよく利用されるROW_NUMBER関数です。

これは、連番を付与してくれる関数です。
早速使ってみましょう。

SELECT
    名前,
    部署,
    年齢
    ROW_NUMBER () over (ORDER BY 部署) as row_num
FROM
    社員マスター

実行結果

名前 部署 年齢 row_num
田中 営業 31 1
高橋 営業 20 2
中村 営業 55 3
佐藤 経理 40 1
棚橋 総務 30 1
鈴木 総務 24 2
清水 総務 29 3

この通り、部署ごとに連番がふられております。
先程のRANK関数と違う点は、年齢のランクではないため、
年齢の若い順番に連番が付与されているわけではありません。

参考文献

入門者の方に非常におすすめの本になります。
わかりやすい解説から、練習問題までたくさん用意されているので、
SQLの習得に有用ではないかと思います。

スッキリわかるSQL入門 第2版 ドリル222問付き! (スッキリシリーズ)

スッキリわかるSQL入門 第2版 ドリル222問付き! (スッキリシリーズ)