【SQL入門】ウィンドウ関数の使い方
ウィンドウ関数でできること
ウィンドウ関数とは、分析する際の関数として非常に便利です。
主に、ランキングや連番を付与することが可能です。
ウィンドウ関数を使ってみる
早速、具体例を用いて説明していきましょう。
参考文献
入門者の方に非常におすすめの本になります。
わかりやすい解説から、練習問題までたくさん用意されているので、
SQLの習得に有用ではないかと思います。
スッキリわかるSQL入門 第2版 ドリル222問付き! (スッキリシリーズ)
- 作者: 中山清喬,飯田理恵子,株式会社フレアリンク
- 出版社/メーカー: インプレス
- 発売日: 2018/11/30
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
サンプルテーブル
このように、社員の所属部署と年齢が格納されたテーブルを利用します。
名前 | 部署 | 年齢 |
---|---|---|
田中 | 営業 | 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問付き! (スッキリシリーズ)
- 作者: 中山清喬,飯田理恵子,株式会社フレアリンク
- 出版社/メーカー: インプレス
- 発売日: 2018/11/30
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る