צבירה של מוצרים

עודכן דף :
תאריך יצירת דף :

נתונים לדוגמה

כל שעליך לעשות הוא להגדיר טבלה, נתונים עם שנים בלבד, חודשים וריבית.

-- テーブル定義
declare @利息マスタ table 
(
  年月 nvarchar(6)
 ,利息 decimal(4, 2)
)

-- サンプルデータ挿入
insert @利息マスタ
          select N'201501', 1.05
union all select N'201502', 1.03
union all select N'201503', 1.02
union all select N'201504', 1.10
union all select N'201505', 1.02
union all select N'201506', 1.06
union all select N'201507', 1.07
union all select N'201508', 1.04
union all select N'201509', 1.06
union all select N'201510', 1.07
union all select N'201511', 1.03
union all select N'201512', 1.02

-- 確認
select * from @利息マスタ

צבירה של מוצרים

ניתן לקבל את הצבירה של המכפלה על ידי צבירה של "פונקציה מעריכית" ו"פונקציה לוגריתמית ". SQL נראה כך:

-- 集計
select exp(sum(log([利息]))) from @利息マスタ
-- 結果:1.73968081491318

זוהי צורה שניתן לממש על ידי טבעם של "פונקציה מעריכית" ו"פונקציה לוגריתמית ".

ראשית, הסיכום של הפונקציה הלוגריתמית הוא "log x + log y = log(x * y)" על ידי הנוסחה. הנוסחה המעריכית "e logx = x**" נותנת "e log(x*y) =x * y" על ידי החלת הנוסחה המתקבלת על ידי סכום הפונקציות הלוגריתמיות. (x * y * ... (החלק של הוא מספר הנתונים)

אפס והתכתבות שלילית

מאחר שפונקציה לוגריתמית אינה יכולה להיות קטנה או שווה ל- 0, מתרחשת שגיאה אם יעד הצבירה מכיל מספר קטן מ- 0 או שווה ל- 0. כדי להתאים למספרים מתחת ל- 0, השתמש ב- SQL באופן הבא:

-- 集計(ゼロ、負対応)
select
  case
    when min(abs([利息])) = 0 then 0
    else
       exp(sum(log(abs(nullif([利息], 0)))))
     * round(0.5 - count(nullif(sign(sign([利息]) + 0.5), 1)) % 2, 0)
  end as [利息合計]
from @利息マスタ
-- 結果:1.73968081491318