在 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
我正在努力计算最后两列 AvgRegionWaste 和 Lift.
我尝试了以下方法(如 所述):
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。
我有一个数据 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 |
我正在努力计算最后两列 AvgRegionWaste 和 Lift.
我尝试了以下方法(如
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。