可使用SUM彙總函數將欄位進行加法之總合運算,但如需進行如計算多期報酬率合計之乘法總合運算,將通常會改用程式迴圈或CURSOR運算方式,但其實可使用對數(logarithm)運算基本概念即可完成。公式如下:

欄位中多筆資料之乘法運算,首先需透過式(1)對運運算和差基本概念,可將乘法運算轉換為加法運算,再將合計值透過式(2) 還原運算概念,將原先對數轉換運算進行還原,即為所示。以下將使用SUM() OVER()分析函數替代SUM()函數,以便同時顯示原始資料及總計結果,如下:
| 
SQL / Result | 
說明 | |
| 
ORACLE | 
SELECT column_value 
      , SUM(column_value) OVER() Total_Sum 
      , EXP(SUM(LN(column_value)) OVER()) Total_Multiplication 
FROM TABLE(SYS.DBMS_DEBUG_VC2COLL( 1, 2, 4 ))  | 
1. LN運算將乘法變加法 
2. 以EXP還原 | 
| 
MSSQL | 
SELECT Val     
      , SUM(VAL) OVER() Total_Sum 
      , EXP(SUM(LOG(VAL)) OVER()) Total_Multiplication 
FROM (VALUES(1),(2),(4)) AS Test(Val)  | 
MSSQL中LOG函數是代表以自然對數(e)為底之LN (Natural logarithm)。
 
沒有留言:
張貼留言