我的盒子上没有SQL Server,但为什么以下answer不会在Postgres上返回360?
select exp(sum(log(val)))
from (values(4),(5),(3),(6)) as tbl(val)
返回12.888075
答案 0 :(得分:3)
你必须使用自然对数(ln函数),而不是base-10对数(log函数):
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)