Агрегирование продуктов

Страница обновлена :
Дата создания страницы :

Пример данных

Просто определите таблицу, данные только с годами, месяцами и процентами.

-- テーブル定義
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