sqlのwindow関数のframe
window関数のframeについてまとめたい。 なおwindow関数はpostgresql, prestoでは利用可能で、MySQLでは利用できない。
今回使ってみるのはpresto 0.152である。
WITH data AS ( SELECT * FROM (VALUES ('2016-12-01', '/', 100), ('2016-12-01', '/category', 100), ('2016-12-01', '/faq', 100), ('2016-12-02', '/', 100), ('2016-12-02', '/faq', 100), ('2016-12-03', '/', 100), ('2016-12-03', '/category', 100), ('2016-12-04', '/category/technology', 100) ) AS temp (date, path, pv) ) SELECT date, path, pv, SUM(pv) OVER(PARTITION BY path) AS "ページごとのpv合計", SUM(pv) OVER(PARTITION BY path ORDER BY date) AS "ページごとのその日までのpv合計", SUM(pv) OVER(PARTITION BY path ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS "ページごとの前日までのpv合計" FROM data ORDER BY date, path ;
date | path | pv | ページごとのpv合計 | ページごとのその日までのpv合計 | ページごとの前日までのpv合計 |
---|---|---|---|---|---|
2016-12-01 | / | 100 | 300 | 100 | |
2016-12-01 | /category | 100 | 200 | 100 | |
2016-12-01 | /faq | 100 | 200 | 100 | |
2016-12-02 | / | 100 | 300 | 200 | 100 |
2016-12-02 | /faq | 100 | 200 | 200 | 100 |
2016-12-03 | / | 100 | 300 | 300 | 200 |
2016-12-03 | /category | 100 | 200 | 200 | 100 |
2016-12-04 | /category/technology | 100 | 100 | 100 |
- frameの設定には
ROWS
RANGE
の二種類ある。