【SQL】Window関数 ~ 入門編 ~

「基本がわかる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