问题描述
餐桌产品按产品划分的平均收入
产品 | avg_rev |
---|---|
A | 500 |
B | 400 |
C | 250 |
D | 100 |
表 product_diff,是我需要计算的地方,diff_a 作为另一列,公式 a-a、a-b、a-c、a-d 延续。
产品 | avg_rev | diff_a |
---|---|---|
A | 500 | 0 |
B | 400 | 100 |
C | 250 | 250 |
D | 100 | 400 |
到目前为止我的查询:
select product,avg_rev,lag(avg_rev,1) over (order by product) as prevIoUs_value from product;
我可以通过说 prevIoUs_value-avg_rev
来计算前一行减去当前行之间的差异,但我需要的是前一行是恒定的,减去当前行一直结转。
解决方法
您需要第 1 个产品的 avg_rev
与当前行的 avg_rev
的差:
SELECT product,avg_rev,FIRST_VALUE(avg_rev) OVER (ORDER BY product) - avg_rev AS diff_a
FROM product;
参见demo。
结果:
产品 | avg_rev | diff_a |
---|---|---|
A | 500 | 0 |
B | 400 | 100 |
C | 250 | 250 |
D | 100 | 400 |
如果您特别想要其中一种产品,我会使用条件逻辑:
select product,avg_rev - max(case when product = 'A' then avg_rev end) over () as diff_a
from product;