我的数据集有问题

Month Year Sales
1 2021 100
2 2021 150
3 2021 200
1 2022 100
2 2022 140
3 2022 120
1 2023 100
2 2023 100
3 2023 100

我想为每一行添加一个新列,其中包含前一年的平均销售额,以获得以下结果:

Month Year Sales Avg Sales Previous year
1 2021 100 null
2 2021 150 null
3 2021 200 null
1 2022 100 150
2 2022 140 150
3 2022 120 150
1 2023 100 120
2 2023 100 120
3 2023 100 120

我试过这个:

lag("Sales",1)OVER( 按"月"划分 ORDER BY"year","month"ASC )

但它并不适用于每一行

你有解决方案吗?

谢谢

推荐答案

am2相同的方法只是用于UPDATE语句,因为您询问如何用平均值填充一列.

UPDATE data
SET year_mean = subquery.mean
FROM (
  SELECT year, avg(sales) as "mean" FROM data
  GROUP BY year
) as subquery
WHERE data.year = (subquery.year - 1);

确切的语法可能会因您的DBMS而异,但应该可以使其适用于每个DBMS.

使用postgres的例子: DB<>Fiddle.uk

Sql相关问答推荐

如何在PostgreSQL中同时为id s列表执行多个update语句?'

防止ActiveRecord迁移在db/structure.sql中进行巨大更改

值对于类型字符来说太长

根据最大值为字母数字大小写分配数值

在Postgres中合并相似的表

改进的SQL子字符串提取

在子窗口SQL Presto中使用特定条件执行值计数

两个月之间的WHERE CASE WHEN-ORA-00905:缺少关键字

使用 Oracle SQL Developer 将不同的列值转换为列会导致错误 ORA-01489

从另一个没有公共键的表中获取值来加入

try 将多行折叠为单个结果

String_Split 多列

将 MERGE 语句与 Oracle PL/SQL 表类型一起使用时,导致无效数据类型错误的原因是什么?

Django only() 和 values() 不适用于 prefetch_related()

根据条件列出不同的值

如何使用 pg-promise 创建要在复杂的 sql 查询中使用的 VALUES 列表?

交叉应用 OPENJSON / PIVOT - 错误的顺序

BigQuery 错误:SELECT 列表表达式引用 esthetician.LICENSE_TYPE,它既未在 [49:8] 分组也未聚合

如何在 SQL Server 中参数化 Select top 'n'

如何刷新在视图之上创建的表