generated at
SQLのWINDOW関数
MySQLはv8.0.2からサポート




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
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



無名ウィンドウ構文名前付きウィンドウ構文にはそれぞれ利点があるので場合によって使い分けるのが良いらしい
前者はシンプルに書ける
後者はwindowの使い回しができる
名前付きウィンドウ構文には対応していないDBMSもある


window関数の3つの機能
PARTITION BY句によるRecord集合のcut
ORDER BY句によるRecordの順序付け
FRAME句に依るcurrent recordを中心としたsubsetの定義


SQLのGROUP BYと比較して何が良いのか?
WINDOW関数はカットの部分のみを担い、適当な集約関数と組み合わせて使用する
だから、カットと集約がセットになっているGROUP BYと比べて、
より柔軟に集約ができる
みたいな感じ #??


若干わかりづらいのは、
集約&カットの GROUP BY と、
カットのみの OVER (..) が、
出現する場所が異なる点mrsekut
GROUP BYはSQLの最後の方に書くのが普通だが、 OVER (..) はSELECT句内に書く
これはmrsekutが知らんだけで、他の場所に書けるのかもしれないけど









この辺のキーワードは全てウィンドウ関数専用のものなのか?
WINDOW, ROWS, OVER, CURRENT, ROW, ROWS, PRECEDING
SQLをシランので判別できない


参考
シンプルで基本的なことがわかりやすい