2

实现一组价值观的产品的最佳方式是什么?

select Col1, multiple(V) -- returns v1*v2*...*vn
from Table
group by Col1
4

1 回答 1

3

product()您可以通过执行以下操作来伪造聚合函数:

SELECT Col1, EXP(SUM(LOG(V)))
FROM Table
GROUP BY Col1

为什么这行得通?

举个例子:

DECLARE @x INT, @y INT

SET @x = 7
SET @y = 8

-- Both return 4.02535
PRINT LOG(@x * @y)
PRINT LOG(@x) + LOG(@y)

-- Both return 56.
PRINT EXP(LOG(@x) + LOG(@y))
PRINT @x * @y

所以对于对数,LOG(x * y) = LOG(x) + LOG(y)...由于我们有一个SUM()函数但没有一个PRODUCT()函数,如果我们将每个值传递给LOG()然后SUM()这些结果,它就相当于将每个值相乘然后将结果传递给LOG()

最后,EXP()对 执行SUM()以反转LOG()

虽然有一些规定可以正常工作......例如每个值都必须大于零。

于 2013-03-18T20:23:49.097 回答