2009-09-29 80 views

回答

2

你必須使用自然對數(LN函數),而不是10爲底的對數(對數函數):

select exp(sum(ln(val))) 
from (values(4),(5),(3),(6)) as tbl(val) 

exp 
----- 
360 
(1 row) 

但這不是繁殖的好辦法行 - 由於四捨五入很慢並且容易出錯。你應該申報的集合:

create function multiply(int,int) returns int as $$ 
    select $1*$2; 
$$ language sql immutable strict; 

create aggregate multiply(int) (
    sfunc=multiply, 
    stype=int, 
    initcond=1 
); 

select multiply(val) 
from (values(4),(5),(3),(6)) as tbl(val) 
multiply 
---------- 
     360 
(1 row) 
+0

:-)東西給其他RDBMS用戶羨慕一下,我會後在這個問題上你的答案http://stackoverflow.com/questions/1490433/performing-multiplication-in -sql-serverset-based-approach – Hao 2009-10-09 07:46:10

+0

:-)你能編輯你的問題嗎?以便說服其他rdbms用戶postgresql超級靈活。從(值(1,4),(8,5),(1,3),(8,6),(1,2))中選擇val,乘以(kyrie) 作爲tbl(val, kyrie) group by val order by val – Hao 2009-10-09 07:54:20

相關問題