繁体   English   中英

我如何通过减法为两个原始数据减一新列

[英]How I can make a new column with subtraction for two raws with +1 shift

我有两栏

sum1   sum2
100    70
60     20
30     10

我还需要另外一列col3 ,可以通过像这样的减法来计算

sum1    sum2    col3
100     70      null
60      20      -80
30      10      -50 

-80我可以通过20-100-5010-60 我需要一开始就减去原料

如何通过sql查询获取此新列?

在关系数据库中的记录是在默认情况下无序的,所以previsous记录没有固有的概念。 为了使您的请求成为可能,您确实需要在原始表中使用一列来对记录进行排序 我假设这样的列存在于表中,并称为id

如果您运行的是MySQL 8.0,则可以使用窗口函数LAG()轻松实现,它使您可以访问上一条记录:

SELECT sum1, sum2, sum2 - LAG(sum1) OVER(ORDER BY id) col3
FROM mytable

如果您运行的是MySQL的旧版本,则它会更加复杂。 一种常见的解决方案是自联接表,并使用NOT EXISTS条件来定位先前的记录(这句话是:恢复记录的ID小于当前记录,并且没有其他具有ID的记录小于当前记录并大于合并记录):

SELECT t.sum1, t.sum2, t.sum2 - t_last.sum1 col3
FROM mytable t
LEFT JOIN mytable t_last
    ON t_last.id < t.id
    AND NOT EXISTS (
        SELECT 1 
        FROM mytable t1
        WHERE t1.id < t.id AND t1.id > t_last.id
    )

创建一个将接受2个int参数的过程。 在其中写入减法语句。 现在,由于无法在select语句中调用此过程,我们将创建一个包装器类函数,该函数将调用该过程,然后通过select语句调用此函数并插入到第三列中。 我们不能直接调用函数/过程,因为调用函数时无法在select语句中执行DML操作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM