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列之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

如何计算来自不同datagridview的每列总和之间的差异并将其显示在datagridview中

在 sql 中查找两个透视列之间的差异

计算Postgresql中两列之间的运行差异

使用 MySQL 计算 2 列的差异等于第 3 列

计算 Oracle SQL 中 2 个日期/时间之间的差异

计算同一列之间的差异,在python中由另一列分组的连续行