gpt4 book ai didi

sql - PostgreSQL 9.5 像电子表格一样优雅的查询

转载 作者:行者123 更新时间:2023-11-29 14:19:18 25 4
gpt4 key购买 nike

有一些新的 (pg9.X) 方法可以用依赖于两个相邻行的函数来表达查询吗?可以使用 LATERAL 吗?

示例:

ID   VAL   DIFF    NOTES
11 6 3 9-6=3
12 9 21 30-9=21
13 30 30 no row to subtract

如何用优雅的SELECT表达DIFF(i) = VAL(i-1)-VAL(i)
PS:假设ORDER BY "ID"

最佳答案

这可以使用 modern SQL 来完成喜欢window functions (从 Postgres 8.4 开始可用)

select id, 
val,
lead(val) over (order by id) - val as diff
from the_table
order by id;

lead() 根据order by 访问 行的列值。如果没有下一行,则结果为 null,因此最后一行的减法结果也为 null。

编辑

如果你想使用具有相同窗口定义的多个窗口函数,你可以定义一次并重新使用它:

select id, 
val,
lead(c1) over w - val as diff1,
lead(c2) over w - val as diff2
from the_table
window w as (order by id)
order by id;

关于sql - PostgreSQL 9.5 像电子表格一样优雅的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35441918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com