通过mysql完成减法

l5tcr1uw  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(303)

我在下面提到了一个名为mydata1的表

ID   Value
1     150
2     120
3     100

我可以使用以下查询获得最后两个值:

SELECT value from myData1 order by ID desc limit 2;

我需要得到这两个值的减法总和(在这个结果集中,结果应该是100-120==>-20)
如果有人能帮忙得到这个结果,我将不胜感激

2uluyalo

2uluyalo1#

方法1

使用相关子查询将第一个和最后第二个值作为两个独立的列获取。
然后可以将结果集用作派生表来计算差异。
尝试(db小提琴演示#1):

SELECT dt.last_value - dt.second_last_value 
FROM 
(
  SELECT 
    t1.Value as last_value, 
    (SELECT t2.Value  
     FROM myData1 AS t2
     WHERE t2.ID < t1.ID 
     ORDER BY t2.ID DESC LIMIT 1) AS second_last_value
  FROM myData1 AS t1 
  ORDER BY t1.ID DESC LIMIT 1
) AS dt

方法2

分成两个不同的select查询;使用 LimitOffset . 对于最后一项,使用系数1。对于倒数第二个,使用因子-1。
使用组合这些结果 UNION ALL 到派生表中。
最后,使用各自的因子对值求和。
您可以执行以下操作(db fiddle demo#2):

SELECT SUM(dt.factor * dt.Value) 
FROM 
(
  (SELECT Value, 1 AS factor 
   FROM myData1 
   ORDER BY ID DESC LIMIT 0,1)

  UNION ALL

  (SELECT Value, -1 AS factor 
   FROM myData1 
   ORDER BY ID DESC LIMIT 1,1)
) AS dt

相关问题