千家信息网

MySQL SQL实现上下行相加减

发表于:2024-10-20 作者:千家信息网编辑
千家信息网最后更新 2024年10月20日,测试用表:CREATE TABLE `test` (`id` int(11) NOT NULL auto_increment,`value` int(11) default NULL,PRIMARY
千家信息网最后更新 2024年10月20日MySQL SQL实现上下行相加减测试用表:
  1. CREATE TABLE `test` (
  2. `id` int(11) NOT NULL auto_increment,
  3. `value` int(11) default NULL,
  4. PRIMARY KEY (`id`)
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8


随意加入测试数据:
  1. mysql> SELECT * FROM test;
  2. +------+-------+
  3. | id | value |
  4. +------+-------+
  5. | 1 | 2 |
  6. | 2 | 5 |
  7. | 3 | 6 |
  8. | 4 | 10 |
  9. +------+-------+


目的:
row2-row1
row3-row2
row4-row3 以此类推,输出。

先做个自连接,连接条件为id1=id2+1,让id1正好为id2的下一个自增。
  1. mysql> SELECT a.id id1, b.id id2, a.value value1, b.value value22
  2. -> FROM test a JOIN test b ON a.id = b.id + 1;
  3. +------+------+--------+---------+
  4. | id1 | id2 | value1 | value2 |
  5. +------+------+--------+---------+
  6. | 2 | 1 | 5 | 2 |
  7. | 3 | 2 | 6 | 5 |
  8. | 4 | 3 | 10 | 6 |
  9. +------+------+--------+---------+
  10. 3 rows in set (0.00 sec)


因为id1为id2的下一个自增,故value1-value2相减为最后的结果。


将上述的自连接结果集写作临时表,让value1与value2相减得到最后的结果:
  1. mysql> SELECT value1 - value2 RESULT
  2. -> FROM (
  3. -> SELECT a.value value1, b.value value2
  4. -> FROM test a JOIN test b ON a.id = b.id + 1
  5. -> ) t;
  6. +--------+
  7. | RESULT |
  8. +--------+
  9. | 3 |
  10. | 1 |
  11. | 4 |
  12. +--------+
  13. 3 rows in set (0.00 sec)

3、1、4即为 5-2、6-4、10-6。
同理可得上下行相加。


作者微信公众号(持续更新)


0