【原创】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
时间: 2024-10-10 02:14:19

【原创】PostgreSQL 实现阶乘方法列举的相关文章

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

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

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

通过urllib.request爬取CSDN原创博客标题方法封装

通过urllib.request爬取CSDN博客原创博客标题方法封装 正则表达式:pat = '<span class=".*">原创</span>(.*)</a>' import re import urllib.request def get_csdn(url, pat, page): title_list = [] for page1 in range(1, int(page) + 1): new_url = url + str(page1)

[原创]PostgreSQL中十进制、二进制、十六进制之间的相互转换

在PostgreSQL中,二进制.十进制.十六进制之间的转换是非常方便的,如下: 十进制转十六进制和二进制 mydb=# SELECT to_hex(10); to_hex -------- a (1 row) mydb=# SELECT 10::bit(4); bit ------ 1010 (1 row) 十六进制转十进制和二进制 mydb=# SELECT x'A'::int; int4 ------ 10 (1 row) mydb=# SELECT x'A'::bit(4); bit -

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,# 遇到无法匹配的字符或者已经到达

钟百迪原创数字校正色彩方法

橄榄图课程笔记: 颜色取样工具定为出灰色的部分. 为了确定需要的三个相等的RGB数值是多少,先调出色相饱和度调整图,把饱和度降到最低,查看定位点的RGB值. 然后回到原图,调出色阶,把3个通道的值都调为那个值.用中间的三角调,两边的辅助微调.

文快速伪原创章提升排名方法

http://passport.baidu.com/?business&un=%E6%89%BE%E7%94%B5%E8%AF%9D%E7%94%B0%E4%B8%9C%E5%B0%8F%E5%A7%90http://passport.baidu.com/?business&un=%E6%89%BE%E7%94%B5%E8%AF%9D%E5%B9%B3%E6%9E%9C%E5%B0%8F%E5%A7%90http://passport.baidu.com/?business&un=