首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL 9.5查询优雅如电子表格

PostgreSQL 9.5查询优雅如电子表格
EN

Stack Overflow用户
提问于 2016-02-16 19:59:20
回答 1查看 44关注 0票数 0

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

示例:

代码语言:javascript
复制
ID   VAL   DIFF    NOTES
11   6     3       9-6=3
12   9     21      30-9=21
13   30    30      no row to subtract

如何用优雅的DIFF(i) = VAL(i-1)-VAL(i)来表达SELECT

PS:假设ORDER BY "ID"

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-16 20:01:56

这可以使用现代SQL (如窗口函数 )来完成(从Postgres 8.4开始就可用了)

代码语言:javascript
复制
select id, 
       val, 
       lead(val) over (order by id) - val as diff
from the_table
order by id;

基于order by访问下一行的列值。如果没有下一行,则结果是null,因此减法的结果对于最后一行也是空的。

编辑

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

代码语言:javascript
复制
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;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35441918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档