MySQL中Order By多字段排序规则代码示例
作者:xlxxcc 发布时间:2024-01-22 01:10:35
说在前面
突发奇想,想了解一下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
来源:http://blog.csdn.net/xlxxcc/article/details/52250963
猜你喜欢
- 今天一个项目上需要,修改了一些属性,测试成功。<!--#include file="conn.asp"-
- 使用Python的内置方法dir,可以范围一个模块中定义的名字的列表。官方解释是:Docstring:dir([object]) ->
- 1. select模块针对select,要先理解其他几个概念:文件描述符:文件描述符在形式上是一个非负整数。实际上,它是一个索引
- 代码案例import pluggy# HookspecMarker 和 HookimplMarker 实质上是一个装饰器带参数的装饰器类,作
- 1. 需要用到的Python库pygametkinter2. 简易UI设计audio_player = Tk()audio_player.t
- 一、正则表达式概述 如果原来没有使用过正则表达式,那么可能对这个术语和概念会不太熟悉。不过,它们并不是您想象的那么新奇。请回想一下在硬盘上是
- 在Windows平台下,如果想运行爬虫的话,就需要在cmd中输入:scrapy crawl spider_name这时,爬虫就能启动,并在控
- python删除某个目录文件夹及文件的方法:#!/usr/bin/env pythonimport osimport shutildelLi
- 简单来说python的内存管理机制有三种1)引用计数2)垃圾回收3)内存池接下来我们来详细讲解这三种管理机制1,引用计数:引用计
- 记得有一期ucdchina书友会里面,聊过一次大家的工作习惯问题,现在回想起来很有意思,特整理这篇文章分享给大家。关于photoshop1
- JSON简介JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于ECMAScript的一个子集
- 和之前C++执行Linux Bash命令的方法 一样,Python依然支持system调用和popen()函数来执行linux bash命令
- 1、旅行商问题(Travelling salesman problem, TSP)旅行商问题是经典的组合优化问题,要求找到遍历所有城市且每个
- 如何正确显示数据库里同时存在的GB码和BIG5码? Public Function CheckBIG(strS
- CentOS mysql安装还是很常用的软件,我就学习如何CentOS mysql安装,在这里拿出来和大家分享一下,希望对大家有用。Cent
- 简介使用 Python 进行数据分析时,比较常用的库有 Numpy、Pandas、Matplotlib,本篇文章就来说一下 Numpy 的使
- 关于作者 王丹丹 , IBM 中国系统与技术中心软件工程师,自从 2006 年加入 IBM,一直从事 Web 系统设计和开发工作,有五年 P
- 前言最近又在重新学习编译原理了,其实两年前也复习过,当初是为了能实现通过 MySQL 的 DDL 生
- 1.下载pyinstaller并解压(可以去官网下载最新版):https://github.com/pyinstaller/pyinstal
- 本文实例分析了Python中的异常处理try/except/finally/raise用法。分享给大家供大家参考,具体如下:异常发生在程序执