如何在Postgres中获取当前和上一年的总金额SUM

问题描述 投票:0回答:1

我有一张像这样的桌子

SR 号 姓名 金额1 数量2 年份
1 作物1 1000 3000 2023
2 作物2 2000 1000 2023
3 作物3 5000 2500 2022
4 作物4 1500 3500 2022
5 作物5 3500 4500 2021
6 作物6 9500 4000 2021

现在,我想要像这样的结果

年份 年数 上一年总和
2023 3000 6000
2022 6000 8500
2021 8500 0

说明 - 2023 年 -> 年度总和 = 2023 年金额 1 的总和 2023 年 -> 上一年总和 = 2022 年金额 2 的总和 2022 年 -> 年总和 = 2022 年金额 2 的总计(2023 年行的上一年总计) 2022 年 -> 上一年总和 = 2021 年金额 2 的总和 2021 年 -> 年总和 = 2021 年金额 2 的总和(2022 年行的上一年总和)。 2021 年 -> 上一年总和 = 2020 年金额 2 的总和。

我尝试使用 case when 条件但没有得到正确的结果,

如何得到这样的结果。

postgresql pgadmin
1个回答
0
投票

您可以使用 cte 和窗口函数:

with sums as (select year, sum(amount1) sum1, sum(amount2) sum2
              from test group by year)
SELECT year, 
       case when (ROW_NUMBER() OVER (ORDER BY year desc) = 1) then sum1 else sum2 end as year_sum,
       COALESCE (LEAD(sum2,1) OVER (ORDER BY year DESC) , 0)  as previous_year_sum
FROM
    sums order by year desc;

db-fiddle

© www.soinside.com 2019 - 2024. All rights reserved.