SQL命令计算2列之间的差异
Posted
技术标签:
【中文标题】SQL命令计算2列之间的差异【英文标题】:SQL Command to calculate difference between 2 columns 【发布时间】:2021-05-20 10:26:17 【问题描述】:我在 Oracle SQL 方面不是很胜任,我被分配了这项任务。我想查找具有相同 id 的先前记录并计算它们的 table_values 之间的差异。到目前为止,我所做的是一个选择,它显示了它存在的前一个值,但是我无法计算差异,并且我的查询出现语法错误。我曾尝试 SELECT *,TABLE_VALUE-PREVIOUS_VALUE 但显然我的措辞是错误的。感谢所有帮助!
我的代码:
SELECT *
FROM(
SELECT
TABLE_ID,
TABLE_VALUE,
YEAR,
MONTH,
LAG(TOWER_VALUE) OVER (
PARTITION BY TABLE_ID
ORDER BY YEAR,MONTH) PREVIOUS_VALUE
FROM
MY_TABLE)
;
【问题讨论】:
【参考方案1】:您不需要子查询。您可以使用:
select t.*,
(tower_value -
lag(tower_value) over (partition by table_id order by year, month)
) as diff
from my_table t;
如果您确实使用子查询,则需要限定*
。所以,在你的情况下:
select t.*,
(value - previous_value) as diff
from ( . . .
) t;
换句话说,Oracle 将select *
视为完整的select
子句。您不能向其中添加任何其他内容。为了做你想做的事,你需要限定*
,然后你可以添加额外的列。
【讨论】:
哇,这不仅是一个超级有用的答案,而且是对 Oracle 选择查询的解释,它为我提供了以前没有的理解。非常感谢! @JamesTheProg 。 . .我推荐(通常)限定列名和*
,但我认为Oracle 是唯一有此限制的数据库。以上是关于SQL命令计算2列之间的差异的主要内容,如果未能解决你的问题,请参考以下文章