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

工作中需用到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. 【二食堂】Alpha - Scrum Meeting 6

    Scrum Meeting 6 例会时间:4.16 11:40 - 12:10 进度情况 组员 昨日进度 今日任务 李健 1. 文本区域进度40%,UI需要进行调整issue 1. 继续文本区域的开发 ...

  2. spring session实现session统一管理(jdbc实现)

    最近在看一些关于spring session 的知识,特做一个笔记记录一下. 在项目中经常会遇到这么一种情况,同一个web项目有时需要部署多份,然后使用nginx实现负载均衡,那么遇到的问题就是,部署 ...

  3. [BZOJ3307] 雨天的尾巴-----------------线段树进阶

    虽然是个板子,但用到了差分思想. Description N个点,形成一个树状结构.有M次发放,每次选择两个点x,y对于x到y的路径上(含x,y)每个点发一袋Z类型的物品.完成所有发放后,每个点存放最 ...

  4. Spring Security:简单的保护一个SpringBoot应用程序(总结)

    Spring Security 在 Java类中的配置 在 Spring Security 中使用 Java配置,可以轻松配置 Spring Security 而无需使用 XML . 在Spring ...

  5. Spring Security:Authorization 授权(二)

    Authorization 授权 在更简单的应用程序中,身份验证可能就足够了:用户进行身份验证后,便可以访问应用程序的每个部分. 但是大多数应用程序都有权限(或角色)的概念.想象一下:有权访问你的面向 ...

  6. Python | 标识符命名规范

    简单地理解,标识符就是一个名字,就好像我们每个人都有属于自己的名字,它的主要作用就是作为变量.函数.类.模块以及其他对象的名称. Python 中标识符的命名不是随意的,而是要遵守一定的命令规则,比如 ...

  7. distinct-subsequences leetcode C++

    Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...

  8. 开发笔记-----Ajax 基础使用

    一.GET 方式的用法: 1 <!--html --> 2 <div class="layui-form"> 3 <div class="l ...

  9. Tcpdump 常用命令、参数记录

    一.介绍 一个关于Centos  Tcpdump 的个人工作总结. 二.参数介绍: 1. -i:   指定要进行抓包的网卡 2.-s0 :表示每个报文的大小是接收到的指定大小,如果没有这个选项,则超过 ...

  10. Go语言实现APPID登录

    package thirdparty import ( "crypto/rsa" "fmt" "github.com/dgrijalva/jwt-go ...