时间:2021-07-01 10:21:17 帮助过:18人阅读
实现的效果是:‘zhangsan‘,‘lisi‘,‘wangermazi‘ 从头到尾依次排序,剩下的元素排在这三个元素的后面随机排序。把1和0替换,又变成了‘wangermazi’,‘lisi‘,‘zhangsan‘的顺序倒序排序了。
0是我们需要的元素的位置,1是其他元素的位置。
同样的效果我们也可以通过“decode”函数实现
Select * from parter where lvl = ‘leader‘ order by decode(name,‘zhangsan‘,0,‘lisi‘,1,‘wangermazi‘,2,3)
实现的效果与上面相同,其中0,1,2是我们需要的三个元素的位置,3是其他元素的位置。
但是第一个SQL语句有一个问题,如果name字段就只有这三个元素,那么when 完全满足条件,这样这三个元素就变成随机排序了。
所以如果使用case 函数,最好是使用这种方式
Select * from parter where lvl=‘leader‘ order by (case when name=‘zhangsan‘ then 0 when name=‘lisi‘ then 1 name=‘wangermazi‘ then 2 else 3 end)
如此,即便name字段只有三个元素,也能按照我们的需求排序了。
需要注意的是,只有我们需要的三个元素是按照我们的所定义的顺序排序的,其余元素是随机排序的,如果我们需要其余元素按照某个字段顺序或者倒序排序,只需要在最后面加逗号字段名即可。
Select * from parter where lvl=‘leader‘ order by (case when name=‘zhangsan‘ then 0 when name=‘lisi‘ then 1 name=‘wangermazi‘ then 2 else 3 end),id desc
decode函数相同
Select * from parter where lvl = ‘leader‘ order by decode(name,‘zhangsan‘,0,‘lisi‘,1,‘wangermazi‘,2,3),id desc
由上面的例子我们知道,那些数字就是元素的位置,而如果我们要把自己需要的元素排最后面呢。
只需要改改数字就行了。
case 函数
Select * from parter where lvl=‘leader‘ order by (case when name=‘zhangsan‘ then 3 when name=‘lisi‘ then 2 name=‘wangermazi‘ then 1 else 0 end).id desc
decode函数相同
Select * from parter where lvl = ‘leader‘ order by decode(name,‘zhangsan‘,3,‘lisi‘,2,‘wangermazi‘,1,0),id desc
而强大的decode函数还为我们可以将余下的元素按照自己的想法排序。
假如我们要把‘zhangsan‘和‘lisi‘排最后,而把‘wangermazi‘排第一,这时我们可以同时使用两个decode函数
Select * from parter where lvl = ‘leader‘ order by decode(name,‘zhangsan‘,3,‘lisi‘,2,0),decode(name,‘wangermazi‘,1),id desc
如此我们便实现了张三和李四分别排倒数第一和倒数第二,王二麻子排第一,其余元素按照id倒序排列。
如此我们便实现了自己需要的元素按照特定的顺序排序。
【SQL】按照特定所需的元素排序
标签:decode where 排列 select 想法 函数实现 code 语句 name