MySql Order By 多个字段 排序规则
说在前面
突发奇想,想了解一下mysql order by排序是以什么规则进行的? 好了,话不多说,直接进入正题吧。
MySql order by 单字段
建一测试表如下:
CREATE TABLE `a` (`code` varchar(255) DEFAULT NULL,`name` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT into a values('中一', '我');
INSERT into a values('中二', '你');
INSERT into a values('高一', '我是');
INSERT into a values('高二', '我们');
INSERT into a values('高二', '我的');
测试语句如下:
-- hex(): 获取16进制字节码
select name, hex(name) from a order by name desc
结果如下:
name | hex(name) |
我的 | E68891E79A84 |
我是 | E68891E698AF |
我们 | E68891E4BBAC |
我 | E68891 |
你 | E4BDA0 |
很明显,MySQL中的排序,是以字节码进行排序的,当第一个字相同的时候,比较第二个字的字节码, 一次类推
MySql order by 多字段
有比较,才有想法,有比较才有进步,因此我们先把单字段的降序排序结果列出来,然后在看看两个字段的降序排序气矿,我们就可以从中分析出其中道理来。
-- 按照name进行降序排序
select * from a order by name desc;
-- 按照code进行降序排序
select * from a order by code desc;
左边是order by name desc, 右边是order by code desc的结果
code | name |
高二 | 我的 |
高一 | 我是 |
高二 | 我们 |
中一 | 我 |
中二 | 你 |
code | name |
高二 | 我们 |
高二 | 我的 |
高一 | 我是 |
中二 | 你 |
中一 | 我 |
结果很明显:单一字段排序的时候,其他字段出现的顺序是自然排序的。
下面我们看看多字段的排序
-- 按照code, name进行降序排序
select * from a order by code, name desc;
code | name |
中一 | 我 |
中二 | 你 |
高一 | 我是 |
高二 | 我的 |
高二 | 我们 |
结果如下:首先谢谢qq_27837327和MjayTang 的,本人在这里一次测试, 原文说这个sql排序无效的说法是错误的。实际上说order by code,name desc等同于order by code asc, name desc
经测试发现,select * from a order by code and name desc 排序效果依然无效。
我们在看看下面的语句
-- 按照code, name进行降序排序
select * from a order by code desc, name desc;
-- 该语句的效果等同于下面的语句, 其中1、2分别对应的是code、name
select code, name from a order by 1 desc, 2 desc;
code | name |
高二 | 我的 |
高二 | 我们 |
高一 | 我是 |
中二 | 你 |
中一 | 我 |
对比code,name的单个字段降序排序,我们可以发现, 使用 order by code desc, name desc的时候,MySQL会先以code进行降序排序,在code进行降序排序该基础上,再使用name进行降序排序。
另外我们还可以使用contat函数把多个字段拼接起来,在进行排序。但是要保证字段不能为null。下面我们来看一下concat的sql语句和结果。
select * from a order by concat(code,name) desc
code | name |
高二 | 我的 |
高二 | 我们 |
高一 | 我是 |
中二 | 你 |
中一 | 我 |
很明显,在这个测试例子上来看, order by concat(code, name) desc的效果等同于 order by code desc, name desc
MySql Order By 多个字段 排序规则相关推荐
- MySQL order by基于不同字段条件排序
MySQL order by基于不同字段条件排序 从数据库上查询数据的时候,按要求排序,在某个字段的不同值的基础上再选择不同的字段进行排序,具体描述如下: 1:首先有一个基础字段status ,sta ...
- sqlserver的order by多个字段排序优先级
环境:SQLserver2012,数据库比较lower 不要介意, 首先简单的来, 1:单个字段排序 SELECT * FROM dbo.app_merchant_card_limit ORDER B ...
- mysql选择排序规则_关于mysql创建数据库中字符集和排序规则的选择
1:字符集: 一般 主要选择两种: 1:utf8 (看unicode编码区从1 - 126就属于传统utf8区,),一般都够用,除非需要存储特殊字符 2:utf8mb4(utf8mb4兼容utf8 ...
- MySQL查询复杂情况的字段排序
MySQL查询复杂情况的字段排序 复杂情况 排序用到的函数 先看效果 SQL片段 有话说 复杂情况 排序字段可能是数字.字母.汉字及其多重组合. 例如1号楼 1单元.一号楼 2单元.A区 A座.A1区 ...
- mysql排序规则_MySQL中Order By多字段排序规则代码示例
说在前面 突发奇想,想了解一下mysql order by排序是以什么规则进行的? 好了,话不多说,直接进入正题吧. MySql order by 单字段 建一测试表如下: CREATE TABLE ...
- mysql orderby 规则_MySQL中OrderBy多字段排序规则代码示例
说在前面 突发奇想,想了解一下mysql order by排序是以什么规则进行的? 好了,话不多说,直接进入正题吧. MySql order by 单字段 建一测试表如下: CREATE TABLE ...
- mysql 回退查询_MYSQL数据库表排序规则不一致导致联表查询,索引不起作用问题...
Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...
- mysql中一次字符集和排序规则引起的sql查询报错
先看sql o.city_name AS '城市',o.city_code AS '城市编码',o.comp_name AS '公司',o.comp_code AS '分公司编码',b.brand_n ...
- mysql order by 多个字段 索引_mysql 索引优化order by 语句
MySql创建索引时支持ASC或DESC排序. 下面举例 创建表时同时创建索引降序排序(sname 字段上普通索引降序) create table tbl1 ( id int unique, snam ...
最新文章
- MySQL数据库左连接查询left join ... on
- VTK:线性单元用法实战
- java3d box 坐标,3d transform的坐标空间及位置
- Python3.6+Django2.0+Xadmin2.0学生信息管理系统-2
- 思科修复运营商级路由器中的两个已遭利用漏洞
- c++提取map key_写 React / Vue 项目时为什么要在列表组件中写 key,其作用是什么?...
- matlab 仿真 毕业设计,毕业设计matlab仿真
- 联想电脑重装系统F12开机项选择无USB启动选项
- 哈尔滨工业大学 计算机系教授,哈尔滨工业大学计算机科学与技术学院导师简介:张田文...
- 小数化分数(C++ 代码讲解很详细)
- OpenStack-Placement组件部署详解(T版)
- Matlab可视化四维数据
- Java 开发环境搭建
- VSFTPD服务器配置
- SpringBoot项目No qualifying bean of type ‘×××Mapper‘ available:的错误解决
- 2022-2028全球与中国荧光增白剂 OB-1市场现状及未来发展趋势
- Hilbert 变换提取信号特征的 Python 实现
- win7如何添加网络打印机和驱动
- centos7 安装 Redis(资源)
- WorldCereal下玉米和小麦全球作物日历