Агрегирование продуктов
Пример данных
Просто определите таблицу, данные только с годами, месяцами и процентами.
-- テーブル定義
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