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 中的累积百分比添加的主要内容,如果未能解决你的问题,请参考以下文章