Oracle連乘聚合函數 MUL

Oracle提供了求和(SUM),平均值(AVG)等聚合函數,但沒有提供連乘的聚合函數。sql

好比有一個表以下:oracle

ID NUM
1 4
2 2
3 2

若是要求NUM列的連乘數,即求: 4*2*2 ,目前Oracle中沒有提供相似函數,但能夠經過某種變換來求。函數

公式爲:  MUL(num) = EXP(SUM(LN(num))).net

數學上推導以下:blog

設  x = 4 * 2 * 2ip

     ln(x) = ln(4*2*2) => ln(4) + ln(2) + ln(2) => sum(ln(num)get

     x = e(sum(ln(sum)數學

     x = exp(sum(ln(sum))io

有兩個地方要注意:table

1. ln的參數不能是負數,求值時要轉換成正的。

2. 連乘的結果可能比較大,會超出範圍。

 

參考:

http://viralpatel.net/blogs/row-data-multiplication-in-oracle/

http://stackoverflow.com/questions/5416169/mutiplication-aggregate-operator-in-sql

 

相關文章
相關標籤/搜索