「基本がわかるSQL入門」って本で Window関数について取り上げてたので、メモ。
目次
【1】Window関数 【2】用途 【3】構文 【4】主なWindow用の関数
【1】Window関数
Windowとは?
* 特定の範囲のデータのみ参照できるようにする機能
Window関数(Window function)とは?
* このWindowに対して、最大、最小、合計、平均などの集計を行う関数
【2】用途
1)XXごとのXX(例:教科ごとの順位、教科ごとの平均) 2)1つ前・1つ後のXXを取得したい(例:前日のユーザの最新データ)
【3】構文
* とりあえず「1)無名Window」を覚えればいい。
1)無名Window
SELECT *, AVG(score) OVER (PARTITION BY subject_code) AS average_score FROM student_score ORDER BY subject_code;
2)名前付きWindow
SELECT *, AVG(score) OVER subject_group AS average_score -- Window「subject_group」を使って教科ごとの平均を算出 FROM student_score WINDOW subject_group (PARTITION BY subject_code) -- Windowに名前を付ける ORDER BY subject_code;
【4】主なWindow用の関数
種別 | 関数 | 結果 |
---|---|---|
集計 | COUNT() | 件数 |
集計 | AVG() | 平均 |
集計 | MAX() | 最大 |
集計 | MIN() | 最小 |
通し番号 | ROW_NUMBER() | 行番号 |
ランキング | RANK() | 順位 |
ランキング | DENSE_RANK() | 順位 |
ランキング | PERCENT_RANK() | 相対順位 |
指定した位置のレコード取得 | LEAD() | 1つ上の行の値 |
指定した位置のレコード取得 | LAG() | 1つ下の行の値 |
指定した位置のレコード取得 | FAST_VALUE() | 最初の行の値 |
指定した位置のレコード取得 | LAST_VALUE() | 最後の行の値 |
指定した位置のレコード取得 | NTH_VALUE()(N:番号) | N番目の行の値 |
参考文献
【ひたすら図で説明】一番やさしい SQL window 関数(分析関数) の使い方 | 趣味や仕事に役立つ初心者DIYプログラミング入門
関連記事
Window関数 ~ ROW_NUMBER ~
https://dk521123.hatenablog.com/entry/2021/09/10/092850
Window関数 ~ ROW_NUMBER / RANK + PARTITION BY ~
https://dk521123.hatenablog.com/entry/2021/03/11/210937
Window関数 ~ LAG / LEAD ~
https://dk521123.hatenablog.com/entry/2021/09/10/092850
Window関数 ~ RANK / DENSE_RANK ~
https://dk521123.hatenablog.com/entry/2012/08/15/225233
過去直近データを取得するには
https://dk521123.hatenablog.com/entry/2016/01/05/234938
グループ内のMAXデータを取得する
https://dk521123.hatenablog.com/entry/2018/10/06/230841
SQLで変化(増加/変化なし/減少)について考える
https://dk521123.hatenablog.com/entry/2021/08/26/222043
期間が重なるデータを取得するには
https://dk521123.hatenablog.com/entry/2011/12/17/025502
相関サブクエリ / 自己相関サブクエリ
https://dk521123.hatenablog.com/entry/2016/01/23/230608
関係演算 / 集合論
https://dk521123.hatenablog.com/entry/2023/01/16/000000