Συγκέντρωση προϊόντων
Δείγμα δεδομένων
Απλά καθορίστε έναν πίνακα, δεδομένα με μόνο χρόνια, μήνες και τόκους.
-- テーブル定義
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