Produktų agregavimas

Puslapis atnaujintas :
Puslapio sukūrimo data :

Duomenų pavyzdys

Tiesiog apibrėžkite lentelę, duomenis, turinčius tik metus, mėnesius ir palūkanas.

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

Produktų agregavimas

Produkto agregavimą galima gauti sujungiant "eksponentinę funkciją" ir "logaritminę funkciją". SQL atrodo taip:

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

Tai forma, kurią galima realizuoti "eksponentinės funkcijos" ir "logaritminės funkcijos" pobūdžiu.

Pirma, logaritminės funkcijos santrauka yra "log x + log y = log(x * y)" pagal formulę. Eksponentinė formulė "e logx = x**" suteikia "e log(x*y) =x * y" taikant formulę, gautą logaritminių funkcijų suma. (x * y * ... (Dalis yra duomenų skaičius)

Nulinė ir neigiama korespondencija

Kadangi logaritminė funkcija negali būti mažesnė arba lygi 0, įvyksta klaida, jei agregavimo paskirties vietoje yra skaičius mažesnis arba lygus 0. Jei norite, kad skaičiai būtų mažesni nei 0, naudokite SQL taip:

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