ウィンドウ関数(OLAP関数)とは?
データベースを使って、リアルタイム(オンラインで)にデータ分析を行うための処理のことで、2000年代中盤くらいからトレンドになっている古くからあるデータベース技術の中でも、比較的新しい技術です。
なお、OracleやSQL Serverでは、「分析関数」と呼んでいたりします。
特徴を一言で言えば
集約機能をなくしたGROUP BY。(GROUP BYは、カットと集約の二つの機能がありますが、ウインドウ関数はカットの部分だけ採用した機能になります。)
ウィンドウ関数の各RDBMSでのサポート状況
比較的新しい技術ということもあり、「MySQL」ではこの関数のサポートはされていません。
それ以外のメジャーなRDBMS(Oracle、SQL Server、DB2、PostgreSQL)ではたいていサポートされています。
ウィンドウ関数の構文
1 |
[ウィンドウ関数] OVER ([PARTITION BY <列リスト>] ORDER BY <ソート用列リスト>) |
PARTITION BY
ウィンドウ関数を適応する範囲を指定します。イメージとしては、GROUP BY句で集計範囲を指定するのと似ています。
これによって、区切られた範囲を「ウィンドウ」と呼びます。
ちなみに、この句自体は必須ではありませんが、指定しなかった場合はテーブル全体がウィンドウの範囲になります。
ORDER BY
「PARTITION BY」で指定した適応範囲の中の並び替えのルールを定義します。
ウィンドウ関数を定義できる場所
基本は、ウィンドウ関数は、WHERE句や、GROUP BY句の処理が終わった結果を元に実行されるので、SELECT文のSELECT句でしか使用しません。
ウィンドウ関数の種類
集約関数
- SUM
- AVG
- COUNT
- MAX
- MIN
ウィンドウ専用関数
- RANK
- DENSE_RANK
- ROW_NUMBER
- LAG
- LEAD
RANK関数
ランキングを算出します。同順位があった場合は、後続の順位が歯抜けになります。
DENSE_RANK関数
ランキングを算出します。同順位があった場合は、後続の順位が歯抜けになりません。
ROW_NUMBER
一意な連番を付与します。
LAG関数
一つ前の行の値を参照できる。
LEAD関数
一つ後の行の値を参照できる。
この記事へのコメントはありません。