首页 > 代码库 > 【原创】PostgreSQL 实现阶乘方法列举
【原创】PostgreSQL 实现阶乘方法列举
PostgreSQL 功能庞大,对实现乘法这类运算有诸多的方法,今天我来简单列举下以下几种便捷的途径。
比如我们要计算10!
1、 可以用SQL给它展开:
t_girl=# select 1*2*3*4*5*6*7*8*9*10 as multiply_10; multiply_10 ------------ 3628800 (1 row) Time: 0.854 ms
2、 用WITH递归
t_girl=# with recursive g(m,n) as t_girl-# (select 1 m, 10 n t_girl(# union all t_girl(# select m*n, (n-1) n from g where n > 1 t_girl(# ) t_girl-# select max(m) as factorial_10 from g; factorial_10 -------------- 3628800 (1 row) Time: 3.893 ms
3、 用简单的函数来展开
create or replace function func_get_factorial( f_number int ) returns bigint as $ytt$ declare i int :=1; declare v_result bigint := 1; begin for i in 1 .. f_number loop v_result := v_result * i; end loop; return v_result; end; $ytt$ language plpgsql; t_girl=# select func_get_factorial(10) as factorial_10; factorial_10 -------------- 3628800 (1 row) Time: 1.022 ms
4、 用游标和序列函数generate_series来展开
create or replace function func_get_factorial2( f_number int ) returns bigint as $ytt$ declare cs1 cursor for select n from generate_series(1,f_number,1) as g(n); declare v_result bigint := 1; declare v_n bigint := 0; begin open cs1; loop fetch cs1 into v_n; exit when not found; v_result := v_result * v_n; end loop; close cs1; return v_result; end; $ytt$ language plpgsql; t_girl=# select func_get_factorial2(10) factorial_10; factorial_10 -------------- 3628800 (1 row) Time: 2.238 ms t_girl=#
5、 用自定义python函数
create or replace function func_get_factorial_py( f_number int ) returns bigint as $ytt$ m = 1 n = 1 for i in range(1,f_number+1): m = m * i n = m return n $ytt$ language plpythonu; t_girl=# select func_get_factorial_py(10) factorial_10; factorial_10 -------------- 3628800 (1 row) Time: 1.060 ms
本文出自 “上帝,咱们不见不散!” 博客,请务必保留此出处http://yueliangdao0608.blog.51cto.com/397025/1575574
【原创】PostgreSQL 实现阶乘方法列举
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。