Aggregazione di prodotti

Pagina aggiornata :
Data di creazione della pagina :

Dati di esempio

Basta definire una tabella, dati con solo anni, mesi e interesse.

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

Aggregazione di prodotti

L'aggregazione del prodotto può essere ottenuta aggregando "funzione esponenziale" e "funzione logaritmica". SQL è simile al seguente:

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

Questa è una forma che può essere realizzata dalla natura di "funzione esponenziale" e "funzione logaritmica".

Innanzitutto, il riepilogo della funzione logaritmica è "log x + log y = log(x * y)" dalla formula. La formula esponenziale "e logx = x**" dà "e log(x*y) =x * y" applicando la formula ottenuta dalla somma delle funzioni logaritmiche. (x * y * ... (La parte di è il numero di dati)

Corrispondenza zero e negativa

Poiché una funzione logaritmica non può essere minore o uguale a 0, si verifica un errore se la destinazione di aggregazione contiene un numero minore o uguale a 0. Per contenere numeri inferiori a 0, utilizzare SQL come segue:

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