Agregación de productos

Actualización de la página :
Fecha de creación de la página :

Datos de muestra

Simplemente defina una tabla, datos con solo años, meses e interés.

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

Agregación de productos

La agregación del producto se puede obtener agregando "función exponencial" y "función logarítmica". SQL se ve así:

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

Esta es una forma que se puede realizar por la naturaleza de la "función exponencial" y la "función logarítmica".

En primer lugar, el resumen de la función logarítmica es "log x + log y = log(x * y)" por la fórmula. La fórmula exponencial "e logx = x**" da "e log(x*y) =x * y" aplicando la fórmula obtenida por la suma de las funciones logarítmicas. (x * y * ... (La parte de es el número de datos)

Correspondencia cero y negativa

Dado que una función logarítmica no puede ser menor o igual que 0, se produce un error si el destino de agregación contiene un número menor o igual que 0. Para acomodar números por debajo de 0, use SQL de la siguiente manera:

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