我一直试图了解如何将引用增加到某个值。
在C语言中,我将简单地增加指针以在下一个数组位置中检索值。
此机制在Postgres中如何工作?有可能吗?
例如,我创建了一个表,其中包含一些数据:
create table mathtest (
x int, y int, val int)
insert into mathtest (x,y,val)
values (1,1,10),(2,2,20),(3,3,30),(4,4,40),(5,5,50),(6,6,60),(7,7,70),(8,8,80),(9,9,90),(10,10,100),(11,11,110)
我想做的是将当前行中的val值相加,然后当行中的x值等于当前x值加2,然后再加上4时,添加val值。我意识到我无法假设检索到的下一行将按固定顺序排列,所以我不能使用'lead'
如果是C,我将简单地增加指针。
对于某些除数,x和y的模为0时,数据输出必须为。 (此位有效)
select
x base,
(x+2) plus1x,
(x+4) plus2x,
y,
val
from mathtest
where x%2 =0 and y%3 = 0
这将输出以下内容:
base plus1x plus2x y val
1 6 8 10 6 60
我想要的输出是:
60 + 80 +100 = 240
我无法将其概念化。我的想法似乎停留在过程C模式下!
我输入并尝试输入的任何错误。
有人可以帮助我克服这个障碍吗?
欢迎来到window functions的世界。
您需要一个明确的顺序,否则说“上一行”是没有意义的。
作为一个简单的例子,要获得与前一个值的差,您可以像这样查询
SELECT val -
lag(val) OVER (ORDER BY x)
FROM mathtest;