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层混合起来,需要多个项目配合结构清晰的进行分层工作,本文根据个人实践经验总结将各个项目进 ...
最新文章
- 解锁新姿势:探讨复杂的 if-else 语句“优雅处理”的思路
- 第一章课后习题(Java)
- python简介怎么写-python怎么写函数
- Go语言字符串和数组的相互转换
- socket python 收 发 队列 线程_对于Python中socket.listen()与多线程结合的困惑?
- 静态时序分析——多周期、半周期和伪路径
- 【2019南昌邀请赛现场赛 - J】Prefix(STLmap,思维)
- linux6.5如何打开ftp服务,CentOs6.5上快速搭建ftp服务器
- 防火墙--iptables
- 构建高性能.NET应用之配置高可用IIS服务器-第五篇 IIS常见问题之:工作进程回收机制(中)...
- matplotlib绘制箭头
- ASP.NET Core学习——6
- 【已解决】Windows Ink中没有便签怎么办
- 【转】Postman 使用方法详解
- 【记录】前端代码规范 规范
- 南方科技大学计算机系师资,于仕琪 - 教师个人主页 - 南方科技大学
- 罗克韦尔AB PLC与西门子Basic精简触摸屏进行通信的具体方法演示
- HDFS文件系统的基础理论,HDFS工作者和管理者的分配,HDFS文件存储容量的理解
- 苹果真伪查询_汇课堂:再见盗版MT4!独家揭秘5种方法辨别真伪MT4
- 使用C++ opencv将16位图像映射到8位
热门文章
- 琅软搜域名:中国搜.搜(CNS.so)
- python可以数独游戏吗_简单实现python数独游戏
- 卡罗拉 (COROLLA) - 雨刷/雨刮器频率控制
- 互联网快讯:华为推“矿鸿”; 京东MALL开业;掌门教育、猿辅导布局素质教育
- 3·15曝光丨智能机器人一年拨打40亿个骚扰电话,6亿人信息已遭泄露!
- 聚苯乙烯和可膨胀聚苯乙烯的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 计算机动画算法与编程基础pdf,清华大学 计算机动画算法与编程基础2-图形绘制课件.ppt...
- python笔记-02(列表和元组)
- ADO.NET学习笔记
- 计算机mac是什么,修改计算机的MAC地址有什么用