Aggregation von Produkten

Diese Seite wurde aktualisiert :
Erstellungsdatum der Seite :

Beispieldaten

Definieren Sie einfach eine Tabelle, Daten mit nur Jahren, Monaten und Interesse.

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

Aggregieren von Produkten

Die Aggregation des Produkts kann durch Aggregation der "Exponentialfunktion" und der "logarithmischen Funktion" erhalten werden. SQL sieht folgendermaßen aus:

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

Dies ist eine Form, die durch die Natur der "exponentiellen Funktion" und der "logarithmischen Funktion" realisiert werden kann.

Erstens lautet die Zusammenfassung der logarithmischen Funktion "log x + log y = log(x * y)" nach der Formel. Die Exponentialformel "e logx = x**" ergibt "e log(x*y) =x * y" durch Anwendung der Formel, die sich aus der Summe der logarithmischen Funktionen ergibt. (x * y * ... (Der Teil von ist die Anzahl der Daten)

Null- und negative Korrespondenz

Da eine logarithmische Funktion nicht kleiner oder gleich 0 sein kann, tritt ein Fehler auf, wenn das Aggregationsziel eine Zahl kleiner oder gleich 0 enthält. Um Zahlen unter 0 unterzubringen, verwenden Sie SQL wie folgt:

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