تجميع المنتجات

تحديث الصفحة :
تاريخ إنشاء الصفحة :

عينة من البيانات

ما عليك سوى تحديد جدول وبيانات بسنوات وأشهر وفوائد فقط.

-- テーブル定義
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" من خلال تطبيق الصيغة التي تم الحصول عليها بواسطة مجموع الدوال اللوغاريتمية. (س * ص * ... (الجزء هو عدد البيانات)

صفر والمراسلات السلبية

نظرا لأن الدالة اللوغاريتمية لا يمكن أن تكون أقل من 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