总结:大组在前,小组在后,计量值再最后,便可实现组内排序;下边是参考别人的具体实例:html
工做中需用到order by 后两个字段排序,但结果却产生了一个Bug,以此备录。数据库
【1】复现问题场景3d
为了说明问题,模拟示例数据库表students,效果同实例。code
以下语句Sql_1:htm
1 SELECT * FROM students st ORDER BY st.sAge, st.sGrade DESC;
(1)预期结果:blog
sAge和sGrade两个字段都按降序排列排序
(2)实际结果:get
sAge按升序排序,sGrade按降序排列class
(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)多个字段时,优先级按前后顺序而定。