Oracle SQL 累积产品

Posted

技术标签:

【中文标题】Oracle SQL 累积产品【英文标题】:Oracle SQL Cumulative Product 【发布时间】:2021-08-16 05:39:29 【问题描述】:

我有一个与mysql cumulative product group by 类似的问题,但我无法让建议的解决方案适合我的情况。

我想将 5 个月的百分比变化值应用于静态值。我希望结果值是所有月份的累积值。

Report_Month PCT_Change Initial_Value
8/1/2021 0.1202 0.88
9/1/2021 -.0426
10/1/2021 -0.0794
11/1/2021 0.0726
12/1/2021 0.1182

如果我在 Excel 中计算,输出将如下所示:

Report_Month PCT_Change Value
8/1/2021 0.1202 0.985776
9/1/2021 -.0426 0.943781942
10/1/2021 -0.0794 0.868845656
11/1/2021 0.0726 0.931923851
12/1/2021 0.1182 1.04207725

但是,当我使用 exp(sum(ln(x))) 方法时,这不是我得到的。这是使用 exp(sum(ln(0.88*(1+pct_change))) over (order by report_month)) 的输出。

Report_Month PCT_Change Value
8/1/2021 0.1202 0.9857
9/1/2021 -.0426 0.8305
10/1/2021 -0.0794 0.6728
11/1/2021 0.0726 0.6351
12/1/2021 0.1182 0.6249

任何帮助将不胜感激。

谢谢, 克里斯

【问题讨论】:

【参考方案1】:

Initial_Value的值必须乘以SUM()窗口函数的结果,所以正确的表达式是:

0.88 * EXP(SUM(LN((1 + pct_change))) OVER (ORDER BY report_month))

请参阅demo。

【讨论】:

完美!这就是我喜欢 Stack Overflow 社区的原因。愚蠢的简单错误,但我一直用头撞墙试图弄清楚几个小时。谢谢@forpas!

以上是关于Oracle SQL 累积产品的主要内容,如果未能解决你的问题,请参考以下文章

漏洞频发 Oracle的CPU疲于奔命

Oracle 差异增量和累积增量的区别

oracle SELECT语句太长的问题

按组 SQL 运行总计 (Oracle)

数据库流行度7月排行榜:Oracle 和 MySQL 暴跌创历史新低

Oracle自动性能统计