总结:大组在前,小组在后,计量值再最后,即可实现组内排序;下边是参考别人的具体实例:

工作中需用到order by 后两个字段排序,但结果却产生了一个Bug,以此备录。

【1】复现问题场景

为了说明问题,模拟示例数据库表students,效果同实例。

如下语句Sql_1:

1 SELECT * FROM students st ORDER BY st.sAge, st.sGrade DESC;

(1)预期结果:

sAge和sGrade两个字段都按降序排列

(2)实际结果:

sAge按升序排序,sGrade按降序排列

(3)分析原因:

order by 多个字段时,Sql语法理解错误导致查询结果集与期望不符。

【2】默认升序

MySql中,order by 默认是按升序排列的。

示例语句Sql_2:

1 SELECT * FROM students st ORDER BY st.sAge;

查询结果集:

显然,不写排序方式,默认是升序。

【3】多个字段时,各自定义升降序

MySql中,order by 多个字段时,需要各自分别定义升降序。

当然,正是本文开始处没有按此语法写Sql语句造成Bug的原因。

示例语句Sql_3:

1 SELECT * FROM students st ORDER BY st.sAge DESC, st.sGrade DESC;

查询结果集:

显然,Sql_1想要实现Sql_3的结果是错误的。因为不写排序方式默认是升序。

【4】多个字段时,按先后顺序排优先级

MySql中,order by 多个字段时,按字段先后顺序排优先级。

以上的示例中,我们只使用了两个字段,下面使用三个字段验证一下这个规则。

(1)按sAge升序、sGrade降序、sStuId降序查询

示例语句Sql_4:

1 SELECT * FROM students st ORDER BY st.sAge ASC, st.sGrade DESC, st.sStuId DESC;

查询结果集:

显然,前两个字段排列顺序确定后,sStuId值没有按降序排列

(2)按sAge升序、sStuId降序、sGrade降序查询

示例语句Sql_5:

1 SELECT * FROM students st ORDER BY st.sAge ASC, st.sStuId DESC, st.sGrade DESC;

查询结果集:

显然,前两个字段排列顺序确定后,sGrade值没有按降序排列

比较Sql_4与Sql_5语句的区别,再对比查询结果集,慢慢体会这两个差异点。

【5】总结

(1)在MySql中,使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。

(2)尤其非常特别重要:默认按升序(ASC)排列。

(3)order by 后可加2个(或多个)字段,字段之间用英文逗号隔开。

(4)若A用升序,B用降序,SQL该这样写:order by A ASC, B DESC; 默认同理,也可以这样写:order by A, B DESC;

(5)若A、B都用降序,必须用两个DESC,order by A DESC, B DESC;

(6)多个字段时,优先级按先后顺序而定。

参考:https://www.cnblogs.com/Braveliu/p/10654091.html

mysql order by 多个字段排序实现组内排序的更多相关文章

  1. mysql order by 多个字段排序

    工作中需用到order by 后两个字段排序,但结果却产生了一个Bug,以此备录. [1]复现问题场景 为了说明问题,模拟示例数据库表students,效果同实例. 如下语句Sql_1: SELECT ...

  2. MySql Order By 多个字段 排序规则

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xlxxcc/article/details/52250963 说在前面 突发奇想,想了解一下mysq ...

  3. mysql order by多个字段

    Mysql order by 多字段排序 mysql单个字段降序排序: select * from table order by id desc; mysql单个字段升序排序: select * fr ...

  4. SQL order by 两个字段排序

    select * from emp;

  5. Mysql order by 多字段排序

    mysql单个字段降序排序: select * from table order by id desc; mysql单个字段升序排序: select * from table order by id ...

  6. MySql 去重且指定某字段在前的排序方法

    今天遇到一个棘手的数据查找并去重的问题: 情况: 1.取出数据库中的数据: 2.同一字段A,不同情况<值,如A值为:a1,a2>下取出的其他数据可能相同: 3.将2情况下的重复数据< ...

  7. Mysql Order By 字符串排序,mysql 字符串order by

    Mysql Order By 字符串排序,mysql 字符串order by ============================== ©Copyright 蕃薯耀 2017年9月30日 http ...

  8. EFCore+Mysql仓储层建设(分页、多字段排序、部分字段更新)

    前沿 园子里已有挺多博文介绍了EFCore+Mysql/MSSql如何进行使用,但实际开发不会把EF层放在Web层混合起来,需要多个项目配合结构清晰的进行分层工作,本文根据个人实践经验总结将各个项目进 ...

  9. mysql order by 排序的问题

    参考博客http://blog.csdn.net/hollboy/article/details/13296601 mysql order by 的排序在今天时候遇到了问题 情景是:将排序的字段设置成 ...

随机推荐

  1. 并发编程从零开始(六)-BlockingDeque+CopyOnWrite

    并发编程从零开始(六)-BlockingDeque+CopyOnWrite 5.2 BlockingDeque BlockingDeque定义了一个阻塞的双端队列接口: 该接口继承了BlockingQ ...

  2. Spring Cloud Alibaba 的服务注册与发现

    Spring Cloud Alibaba 服务发现例子 一.需求 1.提供者完成的功能 2.消费者完成的功能 3.可以附加的额外配置 二.实现步骤 1.总的依赖引入 2.服务提供者和发现者,引入服务发 ...

  3. HTML基础-3

    图像标签(<img>)和源属性(Src) 在 HTML 中,图像由 <img> 标签定义. <img> 是空标签,意思是说,它只包含属性,并且没有闭合标签. 要在页 ...

  4. cf Two Sets (我用二分最大匹配做的)

    题意: n个数p1,p2....pn     两个数a,b 把它们分成A,B两个集合. 若x属于A,a-x一定属于A. 若x属于B,b-x一定属于B. 问是否可能将这n个数分成两个集合.若可以,输出每 ...

  5. AndroidStudio中debug.keystore文件不存在解决办法

    Android项目丢失了debug.keystore,直接重新生存一个key. 在cmd下,进入C:\Users\Administrator\.android目录执行命令如下:  keytool -g ...

  6. bash: mysql: command not found(解决方法)

    执行mysql -uroot -p ,出现如图问题 解决方法如下: 执行以上命令,系统默认会查找/usr/bin下的命令,若这个命令不在该目录下,就会找不到,我们需要做的就是映射一个链接到/usr/b ...

  7. mysqld:未被识别的服务(解决方法)

    启动Mysql:sudo service mysqld start 执行该命令时,提示错误   mysqld:未被识别的服务,如图 解决办法如下: 1·.首先要找到 mysql.server 文件 命 ...

  8. String你会用吗?

    1. 如果不是在循环体中进行字符串拼接的话,直接使用 String 的 "+" 就好了. 2. 单线程循环中操作大量字符串数据 → StringBuilder.append() 3 ...

  9. jenkins-发送allure邮件测试报告

    1.安装插件 allure-jenkins-plugin  2.在全局工具配置中,配置allure命令行 3.全局工具配置中,添加JDK配置 4.配置slave节点工具(JDK+Allure)-配置在 ...

  10. Docker部署 Mysql .Net6等容器

    Centos8安装Docker 1.更新一下yum [root@VM-24-9-centos ~]# yum -y update 2.安装containerd.io # centos8默认使用podm ...