Agregarea produselor
Date eșantion
Pur și simplu definiți un tabel, date cu doar ani, luni și interes.
-- テーブル定義
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 @利息マスタ
Agregarea produselor
Agregarea produsului poate fi obținută prin agregarea "funcției exponențiale" și a "funcției logaritmice". SQL arată astfel:
-- 集計
select exp(sum(log([利息]))) from @利息マスタ
-- 結果:1.73968081491318
Aceasta este o formă care poate fi realizată prin natura "funcției exponențiale" și a "funcției logaritmice".
În primul rând, rezumatul funcției logaritmice este "log x + log y = log(x * y)" prin formula. Formula exponențială "e logx = x**" dă "e log(x*y) =x * y" prin aplicarea formulei obținute prin suma funcțiilor logaritmice. (x * y * ... (Partea din este numărul de date)
Corespondența zero și negativă
Deoarece o funcție logaritmică nu poate fi mai mică sau egală cu 0, apare o eroare dacă ținta de agregare conține un număr mai mic sau egal cu 0. Pentru a găzdui numerele de mai jos 0, utilizați SQL după cum urmează:
-- 集計(ゼロ、負対応)
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