在PostgreSQL中生成斐波那契数列

由于查询结果还没有返回,我很无聊,所以我了解了递归的WITH RECURSIVE,并且尝试了一下以消磨时间。虽然我只在PostgreSQL上尝试过,但其他的关系型数据库管理系统应该也可以用(只要支持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语句实现。在递归中,无法使用聚合函数。

如果有更好的方法,请告诉我。

广告
将在 10 秒后关闭
bannerAds