PostgreSQL 实现阶乘方法列举

PostgreSQL 功能庞大,对实现乘法这类运算有诸多的方法,今天我来简单列举下以下几种便捷的途径。

比如我们要计算10!

1、 可以用SQL给它展开:

t_girl=# select 1*2*3*4*5*6*7*8*9*10 as mutiply_10;
 mutiply_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
时间: 2025-01-04 09:14:19

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-

C#访问PostGreSQL数据库的方法 http://www.jb51.net/article/35643.htm

这次的项目中的一个环节要求我把PostGreSQL数据取出来,然后放到SqlServer里,再去处理分析. http://www.jb51.net/article/35643.htm - 我对PostGreSQL只是一知半解,记录这个过程是希望如果以后微软技术方向的人遇到类似的需求,可以有个比较直接的的参考. 在不熟悉的知识领域里,总是有搜索引擎可以帮到我. 初步了解PostGreSQL数据库及数据形态 首先我想看看PostGreSQL的数据库以及我想要获取的数据形态是什么样子的,Linux和P

Postgresql 的 pg_notify 方法介绍

今日看了这篇博文: https://medium.com/namely-labs/syncing-cache-with-postgres-7a4d78cec022 再一次感叹PG的强大.原来PG还可以通过pg_notify 这个方法,再加上触发器,去主动告诉外界数据的变化. 看了博文后,就用golang自己照着例子写了一个,以供参考: package main import ( "database/sql" "fmt" "log" "t

Javascript拼接HTML字符串的方法列举及思路

转载过来,去掉一些废话吧. 目标: 方便的拼接字符串,不使用让人眼晕的+=.使用过程如下: 1,先创建一个作为“模板”的字符串,如:’My name is ${name},I\’m ${age}.’ 2,传一个对象进去,其中包含了你要填进模板的值,如:{name:’LIX’,age:11} 3,最后你就能得到你想要的字符串了,如:My name is LIX,I’m 11. 调用方法: mix('My name is "${name}",I\'m "${age}".

【python】python与正则 re的主要用到的方法列举

[直接上代码] #coding=utf-8#1.先将正则表达式的字符串形式编译为Pattern实例 #2.使用Pattern实例处理文本并获得匹配结果 #3.最后使用Match实例获得消息,进行其他操作 import re # [1] re.compile(string[,flag]) 将正则表达式编译成pattern对象 '''# [2]re.match(pattern,string[,flags])# 从输入参数string的开头开始尝试匹配pattern,# 遇到无法匹配的字符或者已经到达

求阶乘及阶乘和

1 #求阶乘方法一 2 def f1(n) 3 if n == 1 4 return 1 5 else 6 return n * f1(n-1) 7 end 8 end 9 10 #求阶乘方法二 11 def f2(n) 12 i = 1 13 while n > 0 14 i *= n 15 n -= 1 16 end 17 return i 18 end 19 20 #求1到n的阶乘之和方法一 21 sum = 0 22 (1..43).each do | x | 23 sum = sum

高招 Windows 7下不让病毒执行的方法

常听到一些"比较专业"的IT人员说,"使用者装了防毒软件也就算了,但是一点防毒的概念都没有,以为这样就不会中毒吗?" 要想不中毒,更重要的是,要更进一步了解病毒的运作原理,以及防毒软件的保全之道.在这里,希望对于一般企业的计算机使用者,能提供一些够用的"防毒概念".也许不能"保证"什么,但至少你对于计算机发生的事情能够有个梗概性的认识吧! 精巧脆弱的开机程序 用计算机都得先开机,从打开电源一直到操作系统加载完成,这就是俗称的&

微信小程序常见错误及基本排除方法

也接触了不少人解决问题的过程里,有一些比较难以排查的可能性列举在这,方便大家看一下: 也欢迎大家把自己常用的排除方法列举在这,一起互相学习探讨! 1:ES6:使用es6可能导致安卓端真机调试时很多问题出现,还有其他未知问题:原因未知: 2:字母拼错,包括字母拼写错误,大小写没有注意:微信小程序中,有大量这样的代码示例,从中间冒出一个大写,比如支付中的appId 3:官方文档示例代码有误,有时官方文档示例代码也会出现问题,比如大小写出错,或者其他缺少参数等问题: 4:https,这个坑目前遇到的人

【转帖】Windows下PostgreSQL安装图解

Windows下PostgreSQL安装图解 这篇文章主要为大家介绍了如果在Windows下安装PostgreSQL数据库的方法,需要的朋友可以参考下 现在谈起免费数据库,大多数人首先想到的可能是MySQL,的确MySQL目前已经应用在国内很多领域,尤其是网站架设方面.但是,实际上功能最强大.特性最丰富和最复杂的免费数据库应该是PostgreSQL.它的很多特性正是当今许多商业数据库例如Oracle.DB2等的前身. 其实笔者最近也是因为项目需要,接触了一点PostgreSQL的皮毛,最近Pos