MySQL少有人知的排序方式
MySQL少有人知的排序方式
MySQL是目前应用最广泛的关系型数据库之一,它支持多种排序方式,通常情况下我们使用ORDER BY字段名 ASC(升序)或DESC(降序)就可以满足排序需求。但是遇到一些特殊的排序,单单使用字段名就无法满足需求了,本文就为大家介绍几个遇到过的排序方法。
一、准备工作
为了更好演示与理解,先准备一张学生表,加入编号、姓名、成绩三个字段,插入几条数据,如下图所示:
二、条件排序
需求一:成绩从高到低进行排序
直接使用ORDER BY examScore DESC即可实现。
需求二:成绩从高到低排序,并且没录入成绩的排在最前面
要实现该排序,可以使用IF函数,先判断成绩是否为空,为空则赋给一个最大值,再进行排序。语句为:
ORDER BY IF(examScore IS NULL,101,examScore) DESC
其中如果成绩为空,就赋值为101,然后按照DESC降序排序,这样,没录入成绩的就排在最前面了。
三、自定义排序
需求:张三李四排在最前面,其他学生按照成绩从高到低排序
使用MySQL自带的FIELD函数即可实现。语句为:
ORDER BY FIELD(studentName,'张三','李四') ASC, examScore DESC
其中,FIELD函数返回对应字符串的索引,'张三'对应的索引为1,'李四'对应的索引为2。因此,先按照姓名排序,'张三'和'李四'排在最前面,然后按照成绩降序排序即可。
如果要把'张三'和'李四'编排到最后面,可以进行如下修改:
ORDER BY FIELD(studentName,'李四','张三') DESC, examScore DESC
结果如下图所示:
另外,FIND_IN_SET函数也可以实现自定义排序,而且性能更优:
ORDER BY FIND_IN_SET(studentName,'李四,张三') DESC, examScore DESC
四、汉字拼音首字母排序
有些朋友就奇怪了,汉字排序直接使用普通的ORDER BY字段名 ASC/DESC就行了,为什么说鲜为人知呢?
其实,如果用户创建表字段使用GBK字符集时,直接使用ORDER BY字段名 ASC/DESC就能解决,但是如果用户使用utf8字符集,简单的排序语句就无法满足需求了,因为utf8字符集不支持汉字排序。此时,只需把字段转换为GBK就行了,语句为:
ORDER BY CONVERT(studentName USING GBK) ASC
这样,就可以根据汉字的拼音首字母进行排序了,效果如下图所示:
五、总结
MySQL是一款强大的关系型数据库,它提供了多种排序方式,本文也为大家介绍了一些较为少见的排序方式,有了这些技巧,相信大家在进行排序时会更加得心应手。

-
MySQL Workbench怎么建立数据库(附:sql语句创建数据库方法) 2023-07-20 12:22:29
-
MySQL Workbench是什么?(附:如何设置中文教程) 2023-07-20 11:42:31
-
一起聊聊MySQL主从延时的处理方案 2023-05-14 07:00:03
-
mysql怎么将查询结果赋给变量 2023-05-14 07:00:03
-
mysql驱动是什么 2023-05-14 07:00:03
-
qt5.8如何连接mysql 2023-05-14 07:00:03
-
MySQL 语法整理介绍 2023-05-14 07:00:03
-
mysql修改表结构的语句是什么 2023-05-14 07:00:03
-
mysql乐观锁和悲观锁的区别是什么 2023-05-14 07:00:03
-
mysql查询怎么区分大小写 2023-05-14 07:00:02