mysql 多个字段排序
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 多个字段排序相关推荐
- mysql 按中文字段排序
我们的MySQL使用latin1的默认字符集,也就是说,对汉字字段直接使用GBK内码的编码进行存储,当需要对一些有汉字的字段进行拼音排序时(特别涉及到类似于名字这样的字段时),默认无法通过order ...
- 数据库中自定义排序规则,Mysql中自定义字段排序规则,Oracle中自定义字段排序规则,decode函数的用法,field函数的用法
数据库中自定义排序 场景:有一张banner表,表中有一个status字段,有0, 1, 2三个状态位,我想要 1,0,2的自定义排序(这里是重点),然后再进行之上对sequence字段进行二次排序( ...
- MySQL自定义查询字段排序
同事在做抽奖排名的时候有个问题 需要按照 一等奖 二等奖 三等奖 未中奖 的形式输出数据 问到我如何排序. 数据库设计如下 用一个prize_code字段标示了是否中奖 1是一等奖 2是二等奖 3是三 ...
- mysql将字符串字段转为数字排序或比大小
SELECT * FROM Student WHERE 1 = 1 ORDER BY -ID DESC ; SELECT * FROM Student WHERE 1 = 1 ORDER BY (ID ...
- mysql order by 多字段排序
工作中需用到order by 后两个字段排序,但结果却产生了一个Bug,以此备录. [1]复现问题场景 为了说明问题,模拟示例数据库表students,效果同实例. 如下语句Sql_1: 1 SELE ...
- mysql ef 随机排序_EFCore+Mysql倉儲層建設(分頁、多字段排序、部分字段更新)
前沿 園子里已有挺多博文介紹了EFCore+Mysql/MSSql如何進行使用,但實際開發不會把EF層放在Web層混合起來,需要多個項目配合結構清晰的進行分層工作,本文根據個人實踐經驗總結將各個項目進 ...
- MySQL多字段排序乱_Mysql ORDER BY 中文排序错乱问题
1. 在MySQL中,我们经常会对一个字段进行排序查询,但进行中文排序和查找的时候,对汉字的排序和查找结果往往都是错误的. 这种情况在MySQL的很多版本中都存在. 如果这个问题不解决,那么MySQL ...
- MySQL 按指定字段自定义列表排序
问题描述 大家都知道, MySQL 中按某字段升序排列的 SQL 为 (以 id 为例, 下同): SELECT * FROM `MyTable` WHERE `id` IN (1, 7, 3, 5) ...
- EFCore+Mysql仓储层建设(分页、多字段排序、部分字段更新)
前沿 园子里已有挺多博文介绍了EFCore+Mysql/MSSql如何进行使用,但实际开发不会把EF层放在Web层混合起来,需要多个项目配合结构清晰的进行分层工作,本文根据个人实践经验总结将各个项目进 ...
最新文章
- python怎样判断一个文件是否存在_python如何判断一个文件是否存在
- golang 切片 slice 去掉重复元素
- java 框架 Dao层 Mapper层 controller层 service层 model层 entity层 简介
- python安装教程mac-Mac安装python3的方法步骤
- 内存分配成功,但并未初始化
- 【ZZ】Python的主(main)函数问题
- python高维数据_t-SNE高维数据可视化(python)
- 公众号应用模块-社群广场v2.2.9 修复版
- 架构设计之「数据库集群方案」
- Oracle绑定变量和审计功能影响性能吗?Python告诉你
- append导致TypeError: 'NoneType' object is not iterable
- java毕业设计选题之《校园管理、教育教学类》
- 应用程序中主键ID生成与UUID
- getch方法_getch()函数
- python 课程设计扫雷报告_扫雷游戏课程设计报告
- 好看的table-css样式
- 九八寒露——HRBUST OJ 1269 小把戏
- 阿里云云服务器无法通过公网ip地址访问网站的解决方法
- 名帖35 吴叡 隶书《离骚》
- 用python对S曲线加减速建模