Agrégation de produits
Exemples de données
Il suffit de définir un tableau, des données avec seulement des années, des mois et des intérêts.
-- テーブル定義
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 @利息マスタ
Produits d’agrégation
L’agrégation du produit peut être obtenue en agrégeant « fonction exponentielle » et « fonction logarithmique ». SQL ressemble à ceci :
-- 集計
select exp(sum(log([利息]))) from @利息マスタ
-- 結果:1.73968081491318
C’est une forme qui peut être réalisée par la nature de la « fonction exponentielle » et de la « fonction logarithmique ».
Tout d’abord, le résumé de la fonction logarithmique est « log x + log y = log(x * y) » par la formule. La formule exponentielle « e logx = x** » donne « e log(x*y) =x * y » en appliquant la formule obtenue par la somme des fonctions logarithmiques. (x * y * ... (La partie de est le nombre de données)
Correspondance nulle et négative
Étant donné qu’une fonction logarithmique ne peut pas être inférieure ou égale à 0, une erreur se produit si la cible d’agrégation contient un nombre inférieur ou égal à 0. Pour prendre en charge les nombres inférieurs à 0, utilisez SQL comme suit :
-- 集計(ゼロ、負対応)
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