PostgreSQLのWITH RECURSIVE練習でフィボナッチ数列
PostgreSQLにはWITH RECURSIVE句というものがあって、これを使うと再帰的な問い合わせが可能らしい。で、一度も使ったことがなかったのでちょっと試しにフィボナッチ数列を生成してみた。
with recursive r(a, b) as ( select 0::int, 1::int union all select b, a + b from r where b < 1000 ) select a from r; a ----- 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 (17 rows)
RubyのEnumerable#injectやOCamlのList.fold_leftみたいに最初のSELECT文で初期値を生成、UNION ALL(またはUNION)の後ろに、accumulatorを出力するSELECT文を書けば良さげ(で、ここに終了条件も含む)。