Числа Фибоначчи в SQL
Пример для версий
Oracle 10g SQL,
Oracle 11g SQL
SQL не поддерживает циклы или рекурсии, кроме того, конкатенация полей из разных строк таблицы или запроса не является стандартной агрегатной функцией. Данный пример использует:
-
формулу Бине и математические функции
ROUND,POWERиSQRTдля вычисления n-ого числа Фибоначчи; -
псевдостолбец
levelдля создания псевдотаблицы t1, содержащей числа от 1 до 16; -
встроенную функцию
SYS_CONNECT_BY_PATHдля упорядоченной конкатенации полученных чисел.
SELECT REPLACE(MAX(SYS_CONNECT_BY_PATH(fib||', ', '/')),'/','')||'...' fiblist
FROM (
SELECT n, fib, ROW_NUMBER()
OVER (ORDER BY n) r
FROM (select n, round((power((1+sqrt(5))*0.5, n)-power((1-sqrt(5))*0.5, n))/sqrt(5)) fib
from (select level n
from dual
connect by level <= 16) t1) t2
)
START WITH r=1
CONNECT BY PRIOR r = r-1;
Комментарии
]]>blog comments powered by Disqus
]]>