Postgres 中的累积百分比添加

Posted

技术标签:

【中文标题】Postgres 中的累积百分比添加【英文标题】:Cumulative percentage addition in Postgres 【发布时间】:2020-04-01 13:52:09 【问题描述】:

我有一个场景,我需要找到每个连续月份的百分比差异,有没有办法实现它(Postgresql 版本 11)

有没有办法可以得到如图所示的输出,有很多月份和产品。

下面是输入。

 Name        Date       Quantity
"0009-bio"  "2020-03"   158.0000
"0009-bio"  "2020-04"   
"0009-bio"  "2020-05"   
"0009-bio"  "2020-06"   
"0009-bio"  "2020-07"   
"0009-bio"  "2020-08"   
"0009-bio"  "2020-09"   
"0009-bio"  "2020-10"   
"0009-bio"  "2020-11"   
"0009-bio"  "2020-12"   
"0009-bio"  "2021-01"   
"0009-bio"  "2021-02"   
"0009-bio"  "2021-03"   
"0009-bio"  "2021-04"       
"0014".     "2020-03"   112.0000
"0014"      "2020-04"   
"0014"      "2020-05"   
"0014"      "2020-06"   
"0014"      "2020-07"   
"0014"      "2020-08"   

预期输出:

Name        Date       Quantity
"0009-bio"  "2020-03"   158
"0009-bio"  "2020-04"   158 + 20% = 158+31.6=189.6
"0009-bio"  "2020-05"   189.6 +20% ie, 227.52
"0009-bio"  "2020-06"   227.52 +20% ie,273.02
"0009-bio"  "2020-07"   273.02 + 20%

"0014".     "2020-03"   112
"0014"      "2020-04"   112+ 20%
"0014"      "2020-05"   ..
"0014"      "2020-06"   ..
"0014"      "2020-07"   ..
"0014"      "2020-08"   ..

【问题讨论】:

对于每个name,是否总是只有一个非空quantity @mustaccio 是的,截至目前只有第一行,即 2020-03 March 有值 @mustaccio这个有没有解决方案,任何帮助或建议都会得到greta帮助 【参考方案1】:

我认为你可以只使用窗口函数和算术:

select
    name,
    date,
    first_value(quantity) over(partition by name order by date)
    * power(1.2, row_number() over(partition by name order by date) - 1) quantity
from mytable t

Demo on DB Fiddle

姓名 |日期 |数量 :------- | :-------- | ------------------------------------: 0009-生物 | 2020-03 | 158.000000000000000000000 0009-生物 | 2020-04 | 189.60000000000000000000 0009-生物 | 2020-05 | 227.52000000000000000000 0009-生物 | 2020-06 | 273.02400000000000000000 0009-生物 | 2020-07 | 327.62880000000000000000 0009-生物 | 2020-08 | 393.15456000000000000000 0009-生物 | 2020-09 | 471.78547200000000000000 0009-生物 | 2020-10 | 566.14256640000000000000 0009-生物 | 2020-11 | 679.37107968000000000000 0009-生物 | 2020-12 | 815.24529561600000000000 0009-生物 | 2021-01 | 978.29435473920000000000 0009-生物 | 2021-02 | 1173.95322568704000000000 0009-生物 | 2021-03 | 1408.74387082444800000000 0009-生物 | 2021-04 | 1690.49264498933760000000 0014 | 2020-03 | 112.00000000000000000000 0014 | 2020-04 | 134.400000000000000000000 0014 | 2020-05 | 161.280000000000000000000 0014 | 2020-06 | 193.53600000000000000000 0014 | 2020-07 | 232.24320000000000000000 0014 | 2020-08 | 278.69184000000000000000

【讨论】:

以上是关于Postgres 中的累积百分比添加的主要内容,如果未能解决你的问题,请参考以下文章

将一列浮点数转换为累积百分比

匹配 h2/postgres 中的文字百分比?

匹配h2 / postgres中的文字百分比?

在 Postgres 中的多列上添加累积总和

Highcharts直方图 - 使用累积列百分比绘制样条曲线

谈谈“累积百分声级”