Agregarea produselor

Pagina actualizată :
Data creării paginii :

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