mysql order by 多个字段排序

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。mysql order by 多个字段排序,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

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

【1】复现问题场景

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

如下语句Sql_1:

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

(1)预期结果:

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

mysql order by 多个字段排序

(2)实际结果:

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

mysql order by 多个字段排序

(3)分析原因:

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

【2】默认升序

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

示例语句Sql_2:

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

查询结果集:

mysql order by 多个字段排序

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

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

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

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

示例语句Sql_3:

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

查询结果集:

mysql order by 多个字段排序

显然,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;

查询结果集:

mysql order by 多个字段排序

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

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

示例语句Sql_5:

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

查询结果集:

mysql order by 多个字段排序

显然,前两个字段排列顺序确定后,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.bmabk.com/index.php/post/160832.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!