在 PostgreSQL 中计算一组数据的相对平均值和 Lift

Calculate relative average and Lift for a group of data in PostgreSQL

我有一个数据 table 如下所示:

Shop Region Waste% AvgRegionWaste Lift
a CA 10 15 (30/2) 10/15
b CA 20 15 (30/2) 20/15
c LA 32 37 (74/2) 32/37
d LA 42 37 (74/2) 42/37

我正在努力计算最后两列 AvgRegionWasteLift.

我尝试了以下方法(如 所述):

SELECT avg(waste over (partition by Region order by Shop rows between unbounded preceding and current row) AS rolling_avg
FROM my_table
GROUP BY Shop, Region

但这似乎并不能解决问题。我错过了什么?

AvgRegionWaste 列所需的表达式是:

AVG(waste) OVER (PARTITION BY Region)

查询应该是:

SELECT *,
       ROUND(AVG(waste) OVER (PARTITION BY Region), 2) AvgRegionWaste,
       ROUND(Waste / AVG(waste) OVER (PARTITION BY Region), 2) Lift
FROM my_table;

您可以根据需要调整返回值的舍入。

参见demo