mysql - 通过mysql完成减法
问题描述
我在下面提到了名为 myData1 的表
ID Value
1 150
2 120
3 100
我可以使用以下查询获得最后两个值:
SELECT value from myData1 order by ID desc limit 2;
我需要得到这两个值的减法总和(在这个结果集中,结果应该是 100-120==> -20
感谢有人可以帮助获得此结果
解决方案
方法一
- 使用相关子查询将第一个和倒数第二个值作为两个单独的列。
- 然后,您可以使用结果集作为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
推荐阅读
- css - 如何修复动画抖动
- php - 如何在 PHP 中从 Guzzle 异步 http 客户端获得最快的响应
- angular - 不纯管道无法检测绑定变量的变化,只能工作一次
- google-cloud-firestore - 架构更改的 Firestore 完整集合更新
- sql - 在 where 子句中使用“in”返回子查询返回超过 1 个值
- javascript - 如何将 antd-mobile 文本输入作为受控组件与降档集成?
- ios - 我可以单独旋转我的子节点,但不能旋转具有 1 个枢轴点的组
- html - flexbox parent 遇到子元素问题
- android - Gradle 同步失败:找不到 com.android.tools.build:gradle:5.5.1
- javascript - Mongoose findOne.populate 范围问题