Producten aggregeren

Pagina bijgewerkt :
Aanmaakdatum van pagina :

Voorbeeldgegevens

Definieer eenvoudig een tabel, gegevens met alleen jaren, maanden en rente.

-- テーブル定義
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 @利息マスタ

Producten aggregeren

De aggregatie van het product kan worden verkregen door "exponentiële functie" en "logaritmische functie" te aggregeren. SQL ziet er als volgt uit:

-- 集計
select exp(sum(log([利息]))) from @利息マスタ
-- 結果:1.73968081491318

Dit is een vorm die kan worden gerealiseerd door de aard van "exponentiële functie" en "logaritmische functie".

Ten eerste is de samenvatting van de logaritmische functie "log x + log y = log(x * y)" door de formule. De exponentiële formule "e logx = x**" geeft "e log(x*y) =x * y" door de formule toe te passen die wordt verkregen door de som van de logaritmische functies. (x * y * ... (Het deel van is het aantal gegevens)

Nul en negatieve correspondentie

Omdat een logaritmische functie niet kleiner kan zijn dan of gelijk is aan 0, treedt er een fout op als het aggregatiedoel een getal bevat dat kleiner is dan of gelijk is aan 0. Als u getallen onder 0 wilt opnemen, gebruikt u SQL als volgt:

-- 集計(ゼロ、負対応)
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