Termékek összesítése
Mintaadatok
Egyszerűen határozzon meg egy táblázatot, adatokat csak évekkel, hónapokkal és érdeklődéssel.
-- テーブル定義
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 @利息マスタ
Összesítő termékek
A termék összesítése az "exponenciális függvény" és a "logaritmikus függvény" összesítésével érhető el. Az SQL így néz ki:
-- 集計
select exp(sum(log([利息]))) from @利息マスタ
-- 結果:1.73968081491318
Ez egy olyan forma, amely az "exponenciális függvény" és a "logaritmikus függvény" természetével valósítható meg.
Először is, a logaritmikus függvény összefoglalása a képlet "log x + log y = log(x * y)" a képlet szerint. Az "e logx = x**" exponenciális képlet az "e log(x*y) =x * y" értéket adja a logaritmikus függvények összegével kapott képlet alkalmazásával. (x * y * ... (Ennek része az adatok száma)
Nulla és negatív levelezés
Mivel egy logaritmikus függvény nem lehet kisebb vagy egyenlő 0-nál, hiba lép fel, ha az összesítési cél 0-nál kisebb vagy azzal egyenlő számot tartalmaz. A 0 alatti számok elhelyezéséhez használja az SQL-t az alábbiak szerint:
-- 集計(ゼロ、負対応)
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