Lil*_*ily 2 sql postgresql window-functions
我正在使用PostgreSQL,我想减去同一个表的两个记录,并在同一个查询中使用结果.
这是表格:
6
8
9
6
2
1
我想做的事:
Result = Score(i) - Score(i-1)
Run Code Online (Sandbox Code Playgroud)
最后,我想要这些结果的总和.sum(result)在我的例子中必须是9.
你需要一些方法来确定行的顺序score.关系数据库中的表中没有"自然顺序".所以我假设你有一个id(或时间戳或东西)来订购你的记录.或者i保证每一个新行都更大?然后你可以点击i.
查询本身很简单 - 一旦你发现了窗口函数:
SELECT i - lag(i, 1, 0) OVER (ORDER BY id) AS result
FROM score
ORDER BY id;
Run Code Online (Sandbox Code Playgroud)
包括@Clodoaldo的改进(见评论).
lag(i, 1, 0) OVER (ORDER BY id)
Run Code Online (Sandbox Code Playgroud)
相当于,但比以下更优雅:
COALESCE(lag(i) OVER (ORDER BY id), 0)
Run Code Online (Sandbox Code Playgroud)
目的是涵盖没有前一行的第一行的特殊情况.
在sqlfiddle上演示.
sum(result)是微不足道的,因为i根据你的描述,它必然等于最后一个:
SELECT i
FROM score
ORDER BY id DESC
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)