2018年3月18日 星期日

利用對數(logarithm)概念達成多筆資料之乘積彙總運算

可使用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)


MSSQLLOG函數是代表以自然對數(e)為底之LN (Natural logarithm)


沒有留言:

張貼留言