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 に答える