Агрегуючі продукти
Зразок даних
Просто визначте таблицю, дані лише з роками, місяцями та інтересом.
-- テーブル定義
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 @利息マスタ
Агрегуючі продукти
Агрегацію продукту можна отримати шляхом агрегації «експоненціальної функції» і «логарифмічної функції». SQL виглядає так:
-- 集計
select exp(sum(log([利息]))) from @利息マスタ
-- 結果:1.73968081491318
Це форма, яка може бути реалізована за характером «експоненціальної функції» і «логарифмічної функції».
По-перше, резюме логарифмічної функції - "log x + log y = log(x * y)" за формулою. Експоненціальна формула "e logx = x**" дає "e log(x*y) =x * y", застосовуючи формулу, отриману сумою логарифмічних функцій. (x * y * ... (Частина - це кількість даних)
Нульова і негативна кореспонденція
Оскільки логарифмічна функція не може бути меншою або дорівнювати 0, виникає помилка, якщо ціль агрегації містить число, менше або дорівнює 0. Щоб розмістити числа нижче 0, використовуйте SQL наступним чином:
-- 集計(ゼロ、負対応)
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