sql - 如何找到上一年的变化百分比
问题描述
采购表
create table purchase (
id integer primary key,
purchasedate date not null,
purchasesum numeric(12,2) not null )
包含购买金额。如何找到上一年的变化百分比:
select
extract( year from purchasedate ),
sum( purchasesum),
( sum( purchasesum) - previous row sum( previous purchasesum ) ) /
previous row sum( previous purchasesum ) * 100
from purchase
group by 1
order by 1
结果应该是
2014 1200
2015 1320 +10%
2016 14784 +12%
2017 1774.08 +20%
2018 1596.67 -10%
2019 2075.67 +30%
使用 Postgresql 9.1+
解决方案
您可以使用窗口函数:
select
extract(year from purchasedate),
sum(purchasesum),
(
sum(purchasesum)
- lag(sum(purchasesum)) over(order by extract(year from purchasedate))
)
/ lag(sum(purchasesum)) over(order by extract(year from purchasedate))
* 100 percent_increase
from purchase
group by 1
order by 1
推荐阅读
- sql - 如何从 dolphindb 数据库中获取每组的最新 3 条记录?
- c++ - 在 C++ 中附加到地图时未指定矢量类型?
- javascript - 图例和饼图之间的谷歌饼图指向线
- python - 根据 groupby 条件删除 pandas 数据帧行
- c# - c# 交叉连接两个相同类型的列表
- c# - items.add,Visual Studio 抛出一个错误,说它“没有可用的扩展”
- flutter - 颤振状态管理
- kubernetes - 如何找到 pod 崩溃的原因?
- php - 将excel文件第二张表导入mysql
- java - 如何在 Fabric8 Open Jdk Container 中启用扩展编码?