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

【1】复现问题场景

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

如下语句Sql_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:

 SELECT * FROM students st ORDER BY st.sAge;

查询结果集:

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

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

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

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

示例语句Sql_3:

 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:

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

查询结果集:

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

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

示例语句Sql_5:

 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)多个字段时,优先级按先后顺序而定。

Good Good Study, Day Day Up.

顺序 选择 循环 总结

mysql order by 多个字段排序的更多相关文章

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

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

  2. mysql order by 多个字段排序实现组内排序

    总结:大组在前,小组在后,计量值再最后,即可实现组内排序:下边是参考别人的具体实例: 工作中需用到order by 后两个字段排序,但结果却产生了一个Bug,以此备录. [1]复现问题场景 为了说明问 ...

  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. 教你如何让数据库支持emoji表情符存储

    From: http://www.cnblogs.com/janehoo/archive/2016/04/06/5359800.html 一.教你如何让数据库支持emoji表情符存储 解决方式:更换字 ...

  2. node常见操作命令

    进入REPL环境(READ  EVAL  PRINT  LOOP) 接收用户输入 执行用户输入 打印执行结果到控制台 循环到下一次 打开终端,键入node进入命令交互模式,可以输入一条代码语句后立即执 ...

  3. ajax方法如何给全局变量赋值

    在调用一个jquery的ajax方法时我们有时会需要该方法返回一个值或者给某个全局变量赋值,可是我们发现程序执行完后并没有获取到我们想要的值,这时很有可能是因为你用的是ajax的异步调用async:t ...

  4. Linux块设备IO子系统(一) _驱动模型

    块设备是Linux三大设备之一,其驱动模型主要针对磁盘,Flash等存储类设备,块设备(blockdevice)是一种具有一定结构的随机存取设备,对这种设备的读写是按块(所以叫块设备)进行的,他使用缓 ...

  5. ux.form.field.Year 只能选年的时间扩展

    效果如图,亲测6.2.1版本可用,用法同时间选择控件 //只选择年的控件 Ext.define('ux.picker.Year', { extend: 'Ext.Component', alias: ...

  6. php项目,别人无法访问自己(windows 系统)上Apache服务器原因(转载)

    别人无法访问自己电脑上的Apache服务器,其中最大的原因是因为Windows防火墙的因素. 1.有安装防火墙的,把防火墙关闭 2.windows默认带防火墙的,进入 控制面板-系统和安全-Windo ...

  7. git 彻底删除历史记录中的大文件

    Reference 大家一定遇到过在使用Git时,不小心将一个很大的文件添加到库中,即使删除,记录中还是保存了这个文件.以后不管是拷贝,还是push/pull都比较麻烦. === 删除大文件方法 方法 ...

  8. JS setAttribute兼容

    问题和表现: 最近实践中遇到的问题,setAttribute()设置在IE7中,无法设置style等属性.这样就对设置样式带了很大的困扰,例如绑定点击事件来隐藏元素,setAttribute(”sty ...

  9. LIBS入门

    样品汽化产生自由原子,原子电子的激发诱导光辐射产生表征原子的分立光谱,采集和分析光辐射. 光源:1064nm Nd:YAG固态激光器,10ns脉冲,焦点光密度1 GW·cm−2 可见和紫外光源.   ...

  10. angularjs使用BUG收集和解决办法

    此文章涉及到时1.X的版本.请注意! 1.关于checkbox和bootstrap不能选中BUG 在使用angularjs的时候,有个比较明显的bug ng-disabled无效的情况 这里是一种情况 ...