Числа Фибоначчи в 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
]]>