Agregácia produktov

Stránka aktualizovaná :
Dátum vytvorenia strany :

Vzorové údaje

Jednoducho definujte tabuľku, údaje len s rokmi, mesiacmi a záujmom.

-- テーブル定義
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 @利息マスタ

Agregácia produktov

Agregáciu produktu je možné získať agregáciou "exponenciálnej funkcie" a "logaritmickej funkcie". SQL vyzerá takto:

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

Ide o formu, ktorá sa dá realizovať povahou "exponenciálnej funkcie" a "logaritmickej funkcie".

Po prvé, súhrn logaritmickej funkcie je "log x + log y = log(x * y)" vzorcom. Exponenciálny vzorec "e logx = x**" dáva "e log(x*y) =x * y" použitím vzorca získaného súčtom logaritmických funkcií. (x * y * ... ... (Časť je počet údajov)

Nulová a negatívna korešpondencia

Keďže logaritmická funkcia nemôže byť menšia alebo rovná 0, chyba nastane, ak cieľ agregácie obsahuje číslo menšie alebo rovné 0. Ak chcete vyhovieť číslam pod 0, použite SQL takto:

-- 集計(ゼロ、負対応)
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