换座位
又是一题看了答案才会的题,而且这题出现的几率还是蛮高的。
题目分析:题目给的表是这样的,
题目要求把邻近的座位互换,也就是1和2的座位互换,3和4座位互换,5没有互换的了,就不用换了。
才看起来,感觉完全没法上手,这没法解啊。我们从结果反推。
我们想要的结果应该是这样的
id | student |
---|---|
1 | Doris |
2 | Abbot |
3 | Green |
4 | Emerson |
5 | Jeams |
这样看起来还是不知道怎么做,我们再转换下结果的表
id | student |
---|---|
2 | Abbot |
1 | Doris |
4 | Emerson |
3 | Green |
5 | Jeams |
现在我们能看出什么?我们能看出的是我们直接将相邻的id进行互换就行了,不用考虑id上到底坐的是谁。那我们就有了整体的思路。
整体的思路是:对于表中是偶数的座位,说明两两配对能完全互换,那么是偶数的直接减一即可。奇数直接加一即可。
对于是奇数的座位,其中的偶数位还是一样的,不过会多出来一个奇数位,比如表中的5就是多出来的奇数,对于多出来的奇数就需要单独处理,不变。那么总结就是:对于id%2==0的id,id应该-1.对于id%2==1的而且不是最大的id的应该是id+1,剩下的保持不变。
上面的思路的实现逻辑如下:
select if(id%2=0,id-1,if(id%2=1 and id != (select max(id) from seat),id+1,id)) id,student from seat order by id;
提交结果如下: