LoginSignup
5
5

More than 5 years have passed since last update.

PostgreSQLでフィボナッチ数列

Posted at

クエリの結果が帰ってこなくて暇なのでWITH RECURSIVEなる再帰を知ったので暇つぶしに試してみました。
PostgreSQLでしか試していないですが他のRDBMSでも使えるんじゃあないでしょうか。(WITH RECURSIVE句がサポートされていれば)

クエリは下記

WITH RECURSIVE fibonacci(a, b, c) AS (
    SELECT
        1, 1, 0
    UNION ALL
    SELECT
        a + b,
        CASE
            WHEN a = 1 THEN 1
            ELSE b + c
        END,
        a - c
    FROM fibonacci
    WHERE c < 50
)
SELECT c FROM fibonacci

次のような結果が得られました。

0
1
1
2
3
5
8
13
21
34
55

やったっ!

GENERATE_SERIES使ってみたりだとか、LAGだとか色々試した結果できなくてCASEに頼ってしまいました。
再帰の中では集約関数も使えないんですね。

もっといいやり方あれば教えて下さい。

5
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5