SQLのWINDOW関数
MySQLはv8.0.2からサポート
code:SQL
SELECT shohin_id, shohin_mei, hanbai_tanka,
AVG (hanbai_tanka) OVER (ORDER BY shohin_id
ROWS BETWEEN 2 PRECEDING
AND CURRENT ROW) AS moving_avg
FROM Shohin;
OVERのあとの()の中身がwindowなのかmrsekut.icon
code:sql
SELECT shohin_id, shohin_mei, hanbai_tanka,
AVG(hanbai_tanka) OVER W AS moving_avg
FROM Shohin
WINDOW W AS (ORDER BY shohin_id
ROWS BETWEEN 2 PRECEDING
AND CURRENT ROW);
WINDOW W ASのあとのカッコの中身がwindowなのかmrsekut.icon
前者はシンプルに書ける
後者はwindowの使い回しができる
window関数の3つの機能
FRAME句に依るcurrent recordを中心としたsubsetの定義 WINDOW関数はカットの部分のみを担い、適当な集約関数と組み合わせて使用する
だから、カットと集約がセットになっているGROUP BYと比べて、
より柔軟に集約ができる
若干わかりづらいのは、
集約&カットのGROUP BYと、
カットのみのOVER (..)が、
出現する場所が異なる点mrsekut.icon
GROUP BYはSQLの最後の方に書くのが普通だが、OVER (..)はSELECT句内に書く
これはmrsekut.iconが知らんだけで、他の場所に書けるのかもしれないけど
この辺のキーワードは全てウィンドウ関数専用のものなのか?
WINDOW, ROWS, OVER, CURRENT, ROW, ROWS, PRECEDING
SQLをシランので判別できない
参考
シンプルで基本的なことがわかりやすい