Mengagregatkan produk

Laman dikemaskini :
Tarikh penciptaan halaman :

Data Sampel

Hanya tentukan jadual, data dengan hanya tahun, bulan dan minat.

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

Mengagregatkan Produk

Pengagregatan produk boleh diperolehi dengan mengagregatkan "fungsi eksponen" dan "fungsi logaritma". SQL kelihatan seperti ini:

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

Ini adalah bentuk yang boleh direalisasikan oleh sifat "fungsi eksponen" dan "fungsi logaritma".

Pertama, ringkasan fungsi logaritma ialah "log x + log y = log(x * y)" mengikut formula. Formula eksponen "e logx = x**" memberikan "e log(x*y) =x * y" dengan menggunakan formula yang diperolehi dengan jumlah fungsi logaritma. (x * y * ... (Bahagian bilangan data)

Surat-menyurat sifar dan negatif

Oleh kerana fungsi logaritma tidak boleh kurang daripada atau sama dengan 0, ralat berlaku jika sasaran pengagregatan mengandungi nombor kurang daripada atau sama dengan 0. Untuk memuatkan nombor di bawah 0, gunakan SQL seperti berikut:

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