0
我的箱子上沒有SQL Server,但爲什麼以下answer在Postgres上返回360?爲什麼Postgres的exp/log結果與SQL Server不同?
select exp(sum(log(val)))
from (values(4),(5),(3),(6)) as tbl(val)
返回12.888075
我的箱子上沒有SQL Server,但爲什麼以下answer在Postgres上返回360?爲什麼Postgres的exp/log結果與SQL Server不同?
select exp(sum(log(val)))
from (values(4),(5),(3),(6)) as tbl(val)
返回12.888075
你必須使用自然對數(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)
:-)東西給其他RDBMS用戶羨慕一下,我會後在這個問題上你的答案http://stackoverflow.com/questions/1490433/performing-multiplication-in -sql-serverset-based-approach – Hao 2009-10-09 07:46:10
:-)你能編輯你的問題嗎?以便說服其他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