聊一聊SQL自定义排序

数据库 其他数据库
你有遇到过这样的场景吗?按指定的顺序输出结果,比如按“北京,天津,上海,重庆……”这样的顺序。

今天给大家介绍几种方法来求解这样的问题,我们先看下示例表:

图片

这张表的数据是随机录进去的,下面我们希望按照我们指定的顺序输出为如下内容:

图片

注意:这里既没有按照人口的多少排序,也没有按照GDP的多少排序,更加没有按照城市的拼音首字母排序,完全是按照我们自己的意愿进行排序。

方法一  ORDER BY CASE WHEN

通过在ORDER BY的时候,我们对想要的输出顺序使用CASE WHEN,将文本转化为可排序的数字来进行间接排序,具体代码如下:

*  Citys

City=
City=
City=
City=
City=

此方法针对比较简单的查询容易实现自定义排序,在比较复杂场景中使用起来有限制。

方法二 UNION ALL

使用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数据库开发
相关推荐

2021-03-29 00:02:10

C#Attribute元素

2020-10-15 06:56:51

MySQL排序

2022-06-27 07:50:16

链表节点测试

2020-03-31 10:08:15

零信任安全软件

2023-09-22 17:36:37

2021-01-28 22:31:33

分组密码算法

2020-05-22 08:16:07

PONGPONXG-PON

2018-06-07 13:17:12

契约测试单元测试API测试

2023-05-15 08:38:58

模板方法模式

2021-01-29 08:32:21

数据结构数组

2022-08-08 08:25:21

Javajar 文件

2019-02-13 14:15:59

Linux版本Fedora

2018-11-29 09:13:47

CPU中断控制器

2023-07-06 13:56:14

微软Skype

2022-11-01 08:46:20

责任链模式对象

2021-02-06 08:34:49

函数memoize文档

2021-08-04 09:32:05

Typescript 技巧Partial

2020-09-08 06:54:29

Java Gradle语言

2020-06-28 09:30:37

Linux内存操作系统

2020-08-12 08:34:16

开发安全We
点赞
收藏

51CTO技术栈公众号