今天给大家介绍几种方法来求解这样的排序问题,我们先看下示例表:
这张表的聊聊数据是随机录进去的,下面我们希望按照我们指定的定义顺序输出为如下内容:
注意:这里既没有按照人口的多少排序,也没有按照GDP的排序多少排序,更加没有按照城市的聊聊拼音首字母排序,完全是定义按照我们自己的意愿进行排序。
通过在ORDER BY的排序时候,我们对想要的聊聊输出顺序使用CASE WHEN,将文本转化为可排序的定义数字来进行间接排序,具体代码如下:
* Citys
City=
City=
City=
City=
City=
此方法针对比较简单的查询容易实现自定义排序,在比较复杂场景中使用起来有限制。
使用UNION ALL的方法容易理解,但是代码会写的比较复杂,具体如下:
a.City,a.Population,a.GDP
(
,* Citys City=
ALL
,* Citys City=
ALL
,* Citys City=
ALL
,* Citys City=
ALL
,* Citys City=
) a
a.Num
我们通过增加一列自定义的Num,给查询出来的每一行记录赋一个值,这个值是我们输出的顺序,再通过子查询对这个自定义的Num进行排序即可。时常用在比较复杂的查询语句中,且需要自定义排序的场景下。
相比上面两种方法,创建临时表的方法可以极大的减少代码量。我们可以先创建一个按照我们希望输出的顺序的临时表Temp,具体如下:
当我们需要自定义排序输出时,可以直接关联该临时表,具体代码如下:
a.* Citys a
Temp b a.City=b.City
b.Num
这种方法相对于上面两种方法只需要更新临时表中的顺序即可,可以适应各种不同的场景。
责任编辑:武晓燕 来源: SQL数据库开发 SQL自定义排序(责任编辑:综合)
西力科技(688616.SH):网上发行最终中签率为0.02967172% 配号总数为96,51,58个