PostgreSQL function is huge, to achieve multiplication this kind of operation has many methods, today I will briefly enumerate the following several convenient ways.
Like we're counting 10!
1, you can use SQL to expand it:
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 recursion
t_girl=# with recursive g (M,n) as t_girl-# (select 1 m, Ten Nt_girl (# Union Allt_girl (# Select M*n, (n-1) n from G where n > 1t_girl (#) t_girl-# select Max (m) as factorial_10 from G; Factorial_10-------------- 3628800 (1 row) time:3.893 ms
3. Use simple functions to expand
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 (Ten) as factorial_10; Factorial_10-------------- 3628800 (1 row) time:1.022 ms
4. Use cursors and Sequence function generate_series to expand
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 (Ten) factorial_10; Factorial_10--------------
5. Use custom Python functions
Create or Replace function func_get_factorial_py (f_number int) returns bigint as $ytt $m = 1n = 1for i in range (1,f_num ber+1): m = m * in = Mreturn n$ytt$ language plpythonu;t_girl=# Select Func_get_factorial_py (Ten) factorial_10; Factori Al_10-------------- 3628800 (1 row) time:1.060 ms
PostgreSQL implementation Factorial Method enumeration