MySQL SQL实现上下行相加减
测试用表:
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。
同理可得上下行相加。
作者微信公众号(持续更新)
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。
同理可得上下行相加。
作者微信公众号(持续更新)
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。