加入收藏 | 设为首页 | 会员中心 | 我要投稿 爱站长网 (https://www.0584.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL SQL实现上下行相加减

发布时间:2022-04-04 11:03:41 所属栏目:MySql教程 来源:互联网
导读:测试用表: CREATE TABLE `test` ( `id` int(11) NOT NULL auto_increment, `value` int(11) default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 随意加入测试数据: mysql SELECT * FROM test; +------+-------+ | id | value | +--
      测试用表:
      CREATE TABLE `test` (
      `id` int(11) NOT NULL auto_increment,
      `value` int(11) default NULL,
       PRIMARY KEY  (`id`)
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8
 
 
随意加入测试数据:
mysql> SELECT * FROM test;
+------+-------+
| id   | value |
+------+-------+
|    1 |     2 |
|    2 |     5 |
|    3 |     6 |
|    4 |    10 |
+------+-------+
 
 
目的:
row2-row1
row3-row2
row4-row3 以此类推,输出。
 
先做个自连接,连接条件为id1=id2+1,让id1正好为id2的下一个自增。
mysql> SELECT a.id id1, b.id id2, a.value value1, b.value value22
    -> FROM test a JOIN test b ON a.id = b.id + 1;
+------+------+--------+---------+
| id1  | id2  | value1 | value2  |
+------+------+--------+---------+
|    2 |    1 |      5 |       2 |
|    3 |    2 |      6 |       5 |
|    4 |    3 |     10 |       6 |
+------+------+--------+---------+
3 rows in set (0.00 sec)
 
 
因为id1为id2的下一个自增,故value1-value2相减为最后的结果。
 
 
将上述的自连接结果集写作临时表,让value1与value2相减得到最后的结果:
mysql> SELECT value1 - value2 RESULT
    -> FROM (
    -> SELECT a.value value1, b.value value2
    -> FROM test a JOIN test b ON a.id = b.id + 1
    -> ) t;
+--------+
| RESULT |
+--------+
|      3 |
|      1 |
|      4 |
+--------+
3 rows in set (0.00 sec)
 
3、1、4即为 5-2、6-4、10-6。
同理可得上下行相加。
 

(编辑:爱站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!