加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_宿迁站长网 (https://www.0527zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

面试官:MySql如何实现自定义排序?按指定顺序输出

发布时间:2022-12-03 15:03:00 所属栏目:MySql教程 来源:转载
导读: 你有遇到过这样的场景吗?按指定的顺序输出结果,比如按“北京,天津,上海,重庆……”这样的顺序。
今天给大家介绍几种方法来求解这样的问题,我们先看下示例表:

这张表的数据是随机录

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

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

mysql 排序_mysql left join 排序_mysql排序

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

mysql left join 排序_mysql 排序_mysql排序

注意:这里既没有按照人口的多少排序,也没有按照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,具体如下:

mysql left join 排序_mysql 排序_mysql排序

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

SELECT a.* FROM Citys a

JOIN Temp b ON a.City=b.City

ORDER BY b.Num

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

本人花费2个月时间,整理了一套JAVA开发技术资料,内容涵盖java基础,分布式、微服务等主流技术资料mysql排序,包含大厂面经,学习笔记、源码讲义、项目实战、讲解视频。

mysql 排序_mysql排序_mysql left join 排序

mysql 排序_mysql left join 排序_mysql排序

希望可以帮助一些想通过自学提升能力的朋友,领取资料,扫码关注一下

记得转发+关注+私信

(编辑:云计算网_宿迁站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!