我正在使用 PostgreSQL,我想减去同一个表的两条记录并在同一个查询中使用结果。
这是表格:
分数
6
8
9
结果
6
2
1
我想做的事:
Result = Score(i) - Score(i-1)
最后我想要这些结果的总和。在我的示例中,sum(result)
必须为 9。
最佳答案
您需要某种方法来确定 score
中的行顺序。关系数据库的表中不存在“自然顺序”。所以我假设您有一个id
(或时间戳或其他东西)来排序您的记录。或者 i
保证在每个新行中都更大吗?然后您就可以通过i
订购。
查询本身很简单 - 一旦您找到 window functions :
SELECT i - lag(i, 1, 0) OVER (ORDER BY id) AS result
FROM score
ORDER BY id;
包括@Clodoaldo 的改进(参见评论)。
lag(i, 1, 0) OVER (ORDER BY id)
相当于,但比以下更优雅:
COALESCE(lag(i) OVER (ORDER BY id), 0)
目的是涵盖第一行没有前一行的特殊情况。
Demo on sqlfiddle.
sum(result)
很简单,因为根据您的描述,它必然等于最后一个 i
:
SELECT i
FROM score
ORDER BY id DESC
LIMIT 1;
关于sql - 表中同一列的两条记录相减,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11153980/