MySQL中一些鲜为人知的排序方式
作者:踮脚敲代码 发布时间:2024-01-18 03:18:12
前言
ORDER BY 字段名 升序/降序
,相信进来的朋友都认识这个排序语句,但遇到一些特殊的排序,单单使用字段名就无法满足需求了,下面给大家介绍几个我遇到过的排序方法:
一、准备工作
为了更好演示与理解,先准备一张学生表,加入编号、姓名、成绩三个字段,插入几条数据,如图:
二、条件排序
需求一:成绩从高到低进行排序
街边卖菜的阿姨都能敲,直接使用 ORDER BY examScore DESC
轻松完成了(如下左图)。
需求二:成绩从高到低进行排序,并且没录入成绩的排在最前面
客户体验最重要,为了方便二次录入成绩,提出这样的需求纯属正常。要实现该排序,上面的语句是无法实现的,因此就需要用到条件排序,先判断成绩为空赋个最大值,再进行排序,如 ORDER BY IF(examScore IS NULL,101,examScore) DESC
也能轻松实现(如下右图)。
需求 | 需求一 | 需求二 |
---|---|---|
语句 | ORDER BY examScore DESC | ORDER BY IF(examScore IS NULL,101,examScore) DESC |
效果 |
三、自定义排序
客户如上帝,需求花里胡哨也屡见不鲜,就比如,要求张三李四排在最前面,其他学生按照成绩从高到低进行排序。这种情况就需要使用自定义排序了,MySQL 自带的 FIELD 函数(返回对应字符串的索引)可帮您实现。
语句一:
ORDER BY FIELD(studentName,‘张三',‘李四') ASC, examScore DESC;
上面语句运行结果却把张三李四排到最后了(如下左图),顺理成章的,要把张三李四编排到最前面就进行降序排序。
语句二:
ORDER BY FIELD(studentName,‘李四',‘张三') DESC, examScore DESC;
结果果然正中下怀(如下右图)。
语句 | 语句一 | 语句二 |
---|---|---|
效果 |
后来发现 FIND_IN_SET 函数也能实现,而且使用100万条数据测试,FIND_IN_SET 性能更优。
ORDER BY FIND_IN_SET(studentName,‘李四,张三') DESC, examScore DESC;
四、汉字拼音首字母排序
有些朋友就奇怪了,汉字排序直接使用普通的 ORDER BY 字段 ASC
轻松完事啦,为什么说鲜为人知呢。
其实,用户创建表字段使用 GBK 字符集时,直接使用ORDER BY 字段 ASC
可以迎刃而解,有些用户为了防止乱码,使用了 utf8 字符集,简单的排序语句就无能为力了(如下左图),因此在排序时把字段转换为 GBK 就OK了(如下右图)。
语句 | ORDER BY studentName ASC | ORDER BY CONVERT(studentName USING GBK) ASC |
---|---|---|
效果 |
总结
来源:https://blog.csdn.net/ii950606/article/details/111991092
猜你喜欢
- 本文实例讲述了Python3.4类型判断,异常处理,终止程序操作。分享给大家供大家参考,具体如下:python3.4学习笔记 类型判断,异常
- 1、可以控制左横向滚动还是右横向滚动。2、鼠标悬停上时暂停滚动,移开后恢复滚动。3、间歇时间按需调整,但不要低于容器向左/右移动的时间。JA
- 本文实例讲述了Python有序查找算法之二分法。分享给大家供大家参考,具体如下:二分法是一种快速查找的方法,时间复杂度低,逻辑简单易懂,总的
- 目录1.python中的异常2.捕捉异常try-except多个except子句 一个except块捕捉多个异常 空ex
- perl有最好的文本数据处理能力.这是大家都知道的.在perl本身有一个别的软件没有的小功能,就是Perl格式.它相当于简单的命令行报表和图
- 什么是组件:组件是Vue.js最强大的功能之一。组件可以扩展HTML元素,封装可重用的代码。在较高层面上,组件是自定义的元素,Vue.js的
- 一、数据集小企鹅数据集,提取码:1234该数据集一共包含8个变量,其中7个特征变量,1个目标分类变量。共有150个样本,目标变量为 企鹅的类
- 我们可以很轻松的从1到9或者从9到1正着背一遍,反着背一遍。但是想要在编程实现这些看起来简单的操作,就没那么容易了。因为计算机需要一些指令,
- RSS 是一种基于 XML的文件标准,通过符合 RSS 规范的 XML文件可以简单实现网站之间的内容共享。Ajax 是Asynchronou
- 【历史背景】岁月更迭中我已经从事MySQL-DBA这个工作三个年头,见证MySQL从“基本可用”,“边缘系统可以用MySQL”,“哦操!你怎
- 使用consul四大特性1. 服务发现:利用服务注册,服务发现功能来实现服务治理。2. 健康检查:利用consul注册的检查检查函数或脚本来
- 1、最简单的调用方式 直接写到html的body标签里面,如: <html> <body onload="fun
- 前言在可视化图形中,很多的节点和连线都有某一个特征或者属于某些分类,为了在使用可视化图形的时候更加直观的看出相同类型节点的集合,我们就会用到
- Adobe AIR 在我们国庆节的时候发布了beta2版。 同时发布的还有: FLEX 3.0 beta2 官方说这一版本已经基本上接近正式
- 本文实例讲述了PHP删除数组中指定值的元素。分享给大家供大家参考,具体如下:测试数组如下://这是一个测试数组$testArr = arra
- MySQL有6种日志,监控数据库系统的时候必须知道select日志slow select日志变更日志二进制变更日志(binlog) 
- 本文实例为大家分享了js实现select二级联动下拉菜单,供大家参考,具体内容如下<%@ page language="ja
- CentOS7默认数据库是mariadb, 但是 好多用的都是mysql ,但是CentOS7的yum源中默认好像是没有mysql的。上一篇
- 可以通过 reflect.DeepEqual 比较两个 slice/struct/map 是否相等:package main import
- 经过上一章的内容,其实就页面层来说已结可以很轻松的实现功能了,但是很明显美观上还有很大的欠缺,现在有一些很好的前端css框架,如AmazeU