値のグループの積を実装するための最良の方法は何ですか?
select Col1, multiple(V) -- returns v1*v2*...*vn
from Table
group by Col1
値のグループの積を実装するための最良の方法は何ですか?
select Col1, multiple(V) -- returns v1*v2*...*vn
from Table
group by Col1
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()
ただし、これが正しく機能するためのいくつかの規定があります...たとえば、すべての値はゼロより大きくなければなりません。