Postgres:如何增加索引(指针)以访问其他行

问题描述 投票:0回答:1

我一直试图了解如何将引用增加到某个值。

在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模式下!

我输入并尝试输入的任何错误。

有人可以帮助我克服这个障碍吗?

postgresql
1个回答
0
投票

欢迎来到window functions的世界。

您需要一个明确的顺序,否则说“上一行”是没有意义的。

作为一个简单的例子,要获得与前一个值的差,您可以像这样查询

SELECT val -
       lag(val) OVER (ORDER BY x)
FROM mathtest;
© www.soinside.com 2019 - 2024. All rights reserved.