在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语句实现。在递归中,无法使用聚合函数。
如果有更好的方法,请告诉我。