SQL自定义排序,想怎么排就怎么排

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

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

60.jpg

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


61.jpg

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

方法一  

ORDER BY CASE WHEN

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


SELECT * FROM Citys
ORDER BY 
CASE WHEN City='北京' THEN 1      
     WHEN City='天津' THEN 2
     WHEN City='上海' THEN 3
     WHEN City='重庆' THEN 4
     WHEN City='广州' THEN 5
END


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


方法二 UNION ALL

使用UNION ALL的方法容易理解,但是代码会写的比较复杂,具体如下:


SELECT a.City,a.Population,a.GDP FROM
(
SELECT 1 Num,* FROM Citys WHERE City='北京'
UNION ALL
SELECT 2 Num,* FROM Citys WHERE City='天津'
UNION ALL
SELECT 3 Num,* FROM Citys WHERE City='上海'
UNION ALL
SELECT 4 Num,* FROM Citys WHERE City='重庆'
UNION ALL
SELECT 5 Num,* FROM Citys WHERE City='广州'
) a
ORDER BY a.Num


我们通过增加一列自定义的Num,给查询出来的每一行记录赋一个值,这个值是我们输出的顺序,再通过子查询对这个自定义的Num进行排序即可。时常用在比较复杂的查询语句中,且需要自定义排序的场景下。

方法三 创建临时表

相比上面两种方法,创建临时表的方法可以极大的减少代码量。我们可以先创建一个按照我们希望输出的顺序的临时表Temp,具体如下:



62.jpg

当我们需要自定义排序输出时,可以直接关联该临时表,具体代码如下:


SELECT a.* FROM Citys a
JOIN Temp b ON a.City=b.City
ORDER BY b.Num


这种方法相对于上面两种方法只需要更新临时表中的顺序即可,可以适应各种不同的场景。

相关文章
|
5天前
|
SQL 数据库管理
第二章:基础查询与排序---SQL学习笔记
第二章:基础查询与排序---SQL学习笔记
60 0
|
5天前
|
SQL 存储
SQL组内排序
为什么要用ORDER BY来做,因为是这样的,由于采用的多线程,各个线程触发时间十分相近,但是我们需要对每一个项目进行分组,所以在此处,我们做了一个唯一标识IDENTIFICATION,每个项目每次执行时记录的6条日志里都会存储这个唯一标识。
|
5天前
|
SQL XML Java
Mybatis Plus自定义全局SQL注入
Mybatis Plus自定义全局SQL注入
91 0
|
5天前
|
SQL Oracle 关系型数据库
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
94 0
|
5天前
|
SQL 前端开发
基于jeecgboot复杂sql查询的列表自定义列实现
基于jeecgboot复杂sql查询的列表自定义列实现
11 0
|
5天前
|
SQL 数据库
在mybatis-plus怎么使用自定义的sql语句
在mybatis-plus怎么使用自定义的sql语句
72 0
|
5天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL游标自定义异常:数据探险家的“专属警示灯”
【4月更文挑战第19天】Oracle PL/SQL中的游标自定义异常是处理数据异常的有效工具,犹如数据探险家的警示灯。通过声明异常名(如`LOW_SALARY_EXCEPTION`)并在满足特定条件(如薪资低于阈值)时使用`RAISE`抛出异常,能灵活应对复杂业务规则。示例代码展示了如何在游标操作中定义和捕获自定义异常,提升代码可读性和维护性,确保在面对数据挑战时能及时响应。掌握自定义异常,让数据管理更从容。
|
5天前
|
SQL
SQL语句两个字段或多个字段同时order by 排序
SQL语句两个字段或多个字段同时order by 排序
43 0
|
5天前
|
SQL 人工智能 运维
数据库基础入门 — SQL排序与分页
数据库基础入门 — SQL排序与分页
29 0
|
5天前
|
SQL 数据库管理
SQL基础题----基本的SELECT语句、order by排序
SQL基础题----基本的SELECT语句 ambiguous 模糊
180 1