SQLを使っていてWindow関数を使いたいシチュエーションがあったためまとめてみました。
参考) 「最強の分析ツールと言われるWindow関数について私が学んだこと」
https://dev.classmethod.jp/articles/sql-window-function/
集約関数(Group by)は、一行にまとめますが、Window関数(Partition by)(分析関数ともいわれる)は行がそのままになります。
データ)
https://www.postgresqltutorial.com/postgresql-getting-started/postgresql-sample-database/
環境) Postgresql / Docker / WSL2
https://decode.red/net/archives/1589
ここで作成したDockerのPostgreSQL単体のもの。
サンプルデータのインポート。(便利!)
pg_restore -U postgres -d dvdrental -h localhost ./dvdrental.tar
monthlyデータとdailyデータでgroup byをつかった例
最終的にやりたかったこと
月と日の合計を一緒に表示できました。Group Byでも同様なことはできますが、こちらの方が直感的です。
余談になりますが、下記に面白い記述がありました。
「うっかりチューリング完全になっちゃったもの」 より
https://cpplover.blogspot.com/2013/10/blog-post_20.html
“SQLは通常、チューリング完全とはみなされない。しかし、Common Table Expressionとwindow機能により、SQLはチューリング完全である。”
Group Byの使いにくさを、克服したWindow関数は言語的にも完成度を増したということでしょうか。
チューリングマシンについてか過去記事に以下のようなものを書きました。
「チューリングマシン」
https://decode.red/ed/archives/130
「Lazy K」
関数のみで全てを計算する究極の関数型言語”Lazy K”は、チューリングマシンの例として優れていると思います。