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