首页 > 解决方案 > 通过mysql完成减法

问题描述

我在下面提到了名为 myData1 的表

ID   Value
1     150
2     120
3     100

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

SELECT value from myData1 order by ID desc limit 2;

我需要得到这两个值的减法总和(在这个结果集中,结果应该是 100-120==> -20

感谢有人可以帮助获得此结果

标签: mysqlsql

解决方案


方法一

  • 使用相关子查询将第一个和倒数第二个值作为两个单独的列。
  • 然后,您可以使用结果集作为Derived Table来计算差异。

试试(DB Fiddle DEMO #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 

方法二

  • 分成两个不同的选择查询;Limit与 一起使用Offset。对于最后一项,使用因子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

推荐阅读