ORDERBY⾼级⽤法之CASEWHEN 今天在公司查看⼀段sql SP代码,发现了⼀段⽐较奇怪的代码。
⼤概长这样⼦:
⼩弟才疏学浅,咋⼀看到代码以为这样的:
但是执⾏报错,同时也忘记了 order by 后⾯加数字是什么意思了。。。
果断查了⼀下:
原来order by后⾯跟数字是代表以第⼏列排序的意思。
但是SP 中⽤的是甚⾄没这么多列啊。。。
事实证明 order by 后⾯⽤case when 并不等于 order by 数字
查了相关资料,并且个⼀个表来测试,
⽆ CASE WHEN
ORDER BY 后⾯不使⽤ CASE WHEN
测试sql代码
查询结果
我们可以看到IP 为192.168.130.81 的排在第⼀位
⼀个CASE WHEN
加上 CASE WHEN 当IP 为  192.168.130.85 时,我们返回100,其他返回1000.
代码如下
执⾏结果
我们可以看到IP 为192.168.130.81 的已经不再第⼀位了,192.168.130.85 的被排在了第⼀位。因为IP等于192.168.130.85的我们返回了100 ,不等于192.168.130.85 的我们返回了1000 100⽐1000⼩,所以192.168.130.85 的被排在了第⼀位。
两个CASE WHEN
我们在加⼀个 CASE WHEN  当IP等于192.168.130.87 时,我们返回2,其他返回10.
代码如下
我们可以猜⼀下执⾏结果。
第⼀个CASE WHEN 当IP等于192.168.130.85的我们返回了100 ,不等于192.168.130.85 的我们返回了1000
第⼆个CASE WHEN 当IP等于192.168.130.87的我们返回了2 ,不等于192.168.130.87 的我们返回了10
结果应该 192.168.130.87 被排在第⼀,因为第⼀个case when返回1000 但是被第⼆个CASE WHEN返回是2覆盖掉了,2最⼩的,所以排在第⼀。
哈哈哈。。。就是这样。。。
其实,执⾏结果是这样的。
我们可以看到192.168.130.85 被排在第⼀,
192.168.130.87被排在第⼆。
valid from是什么意思其实两个CASE WHEN是相互不影响的。
其实两个CASE WHEN的sql 结果等价于下⾯的sql
好了,就这样

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。