mysql order by 多个字段排序

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

mysql 多个字段排序相关推荐

  1. mysql 按中文字段排序

    我们的MySQL使用latin1的默认字符集,也就是说,对汉字字段直接使用GBK内码的编码进行存储,当需要对一些有汉字的字段进行拼音排序时(特别涉及到类似于名字这样的字段时),默认无法通过order ...

  2. 数据库中自定义排序规则,Mysql中自定义字段排序规则,Oracle中自定义字段排序规则,decode函数的用法,field函数的用法

    数据库中自定义排序 场景:有一张banner表,表中有一个status字段,有0, 1, 2三个状态位,我想要 1,0,2的自定义排序(这里是重点),然后再进行之上对sequence字段进行二次排序( ...

  3. MySQL自定义查询字段排序

    同事在做抽奖排名的时候有个问题 需要按照 一等奖 二等奖 三等奖 未中奖 的形式输出数据 问到我如何排序. 数据库设计如下 用一个prize_code字段标示了是否中奖 1是一等奖 2是二等奖 3是三 ...

  4. mysql将字符串字段转为数字排序或比大小

    SELECT * FROM Student WHERE 1 = 1 ORDER BY -ID DESC ; SELECT * FROM Student WHERE 1 = 1 ORDER BY (ID ...

  5. mysql order by 多字段排序

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

  6. mysql ef 随机排序_EFCore+Mysql倉儲層建設(分頁、多字段排序、部分字段更新)

    前沿 園子里已有挺多博文介紹了EFCore+Mysql/MSSql如何進行使用,但實際開發不會把EF層放在Web層混合起來,需要多個項目配合結構清晰的進行分層工作,本文根據個人實踐經驗總結將各個項目進 ...

  7. MySQL多字段排序乱_Mysql ORDER BY 中文排序错乱问题

    1. 在MySQL中,我们经常会对一个字段进行排序查询,但进行中文排序和查找的时候,对汉字的排序和查找结果往往都是错误的. 这种情况在MySQL的很多版本中都存在. 如果这个问题不解决,那么MySQL ...

  8. MySQL 按指定字段自定义列表排序

    问题描述 大家都知道, MySQL 中按某字段升序排列的 SQL 为 (以 id 为例, 下同): SELECT * FROM `MyTable` WHERE `id` IN (1, 7, 3, 5) ...

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

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

最新文章

  1. 解锁新姿势:探讨复杂的 if-else 语句“优雅处理”的思路
  2. 第一章课后习题(Java)
  3. python简介怎么写-python怎么写函数
  4. Go语言字符串和数组的相互转换
  5. socket python 收 发 队列 线程_对于Python中socket.listen()与多线程结合的困惑?
  6. 静态时序分析——多周期、半周期和伪路径
  7. 【2019南昌邀请赛现场赛 - J】Prefix(STLmap,思维)
  8. linux6.5如何打开ftp服务,CentOs6.5上快速搭建ftp服务器
  9. 防火墙--iptables
  10. 构建高性能.NET应用之配置高可用IIS服务器-第五篇 IIS常见问题之:工作进程回收机制(中)...
  11. matplotlib绘制箭头
  12. ASP.NET Core学习——6
  13. 【已解决】Windows Ink中没有便签怎么办
  14. 【转】Postman 使用方法详解
  15. 【记录】前端代码规范 规范
  16. 南方科技大学计算机系师资,于仕琪 - 教师个人主页 - 南方科技大学
  17. 罗克韦尔AB PLC与西门子Basic精简触摸屏进行通信的具体方法演示
  18. HDFS文件系统的基础理论,HDFS工作者和管理者的分配,HDFS文件存储容量的理解
  19. 苹果真伪查询_汇课堂:再见盗版MT4!独家揭秘5种方法辨别真伪MT4
  20. 使用C++ opencv将16位图像映射到8位

热门文章

  1. 琅软搜域名:中国搜.搜(CNS.so)
  2. python可以数独游戏吗_简单实现python数独游戏
  3. 卡罗拉 (COROLLA) - 雨刷/雨刮器频率控制
  4. 互联网快讯:华为推“矿鸿”; 京东MALL开业;掌门教育、猿辅导布局素质教育
  5. 3·15曝光丨智能机器人一年拨打40亿个骚扰电话,6亿人信息已遭泄露!
  6. 聚苯乙烯和可膨胀聚苯乙烯的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  7. 计算机动画算法与编程基础pdf,清华大学 计算机动画算法与编程基础2-图形绘制课件.ppt...
  8. python笔记-02(列表和元组)
  9. ADO.NET学习笔记
  10. 计算机mac是什么,修改计算机的MAC地址有什么用