mysql order by 多个字段排序实现组内排序
总结:大组在前,小组在后,计量值再最后,即可实现组内排序;下边是参考别人的具体实例:
工作中需用到order by 后两个字段排序,但结果却产生了一个Bug,以此备录。
【1】复现问题场景
为了说明问题,模拟示例数据库表students,效果同实例。
如下语句Sql_1:
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:
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)多个字段时,优先级按先后顺序而定。
参考:https://www.cnblogs.com/Braveliu/p/10654091.html
mysql order by 多个字段排序实现组内排序的更多相关文章
- mysql order by 多个字段排序
工作中需用到order by 后两个字段排序,但结果却产生了一个Bug,以此备录. [1]复现问题场景 为了说明问题,模拟示例数据库表students,效果同实例. 如下语句Sql_1: SELECT ...
- MySql Order By 多个字段 排序规则
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xlxxcc/article/details/52250963 说在前面 突发奇想,想了解一下mysq ...
- mysql order by多个字段
Mysql order by 多字段排序 mysql单个字段降序排序: select * from table order by id desc; mysql单个字段升序排序: select * fr ...
- SQL order by 两个字段排序
select * from emp;
- Mysql order by 多字段排序
mysql单个字段降序排序: select * from table order by id desc; mysql单个字段升序排序: select * from table order by id ...
- MySql 去重且指定某字段在前的排序方法
今天遇到一个棘手的数据查找并去重的问题: 情况: 1.取出数据库中的数据: 2.同一字段A,不同情况<值,如A值为:a1,a2>下取出的其他数据可能相同: 3.将2情况下的重复数据< ...
- Mysql Order By 字符串排序,mysql 字符串order by
Mysql Order By 字符串排序,mysql 字符串order by ============================== ©Copyright 蕃薯耀 2017年9月30日 http ...
- EFCore+Mysql仓储层建设(分页、多字段排序、部分字段更新)
前沿 园子里已有挺多博文介绍了EFCore+Mysql/MSSql如何进行使用,但实际开发不会把EF层放在Web层混合起来,需要多个项目配合结构清晰的进行分层工作,本文根据个人实践经验总结将各个项目进 ...
- mysql order by 排序的问题
参考博客http://blog.csdn.net/hollboy/article/details/13296601 mysql order by 的排序在今天时候遇到了问题 情景是:将排序的字段设置成 ...
随机推荐
- 北航OO第四单元总结
OO最后一次博客作业--好聚好散 一.单元总结 作业一: 第一次是对类图进行解析,没有太大难度,只要根据讨论区提供的建议,新建两个类来存储相关数据即可实现. 作业二: 第二次作业的难度只有量的提升,然 ...
- zuul的各种配置
我们知道我们前台要展示数据给用户看,这中间可能涉及到从后端的多个微服务进行获取数据.比如获取用户信息需要用到用户微服务.获取商品信息需要获取商品微服务.创建订单需要调用订单微服务,而各个微服务可能分布 ...
- Flink计算pv和uv的通用方法
PV(访问量):即Page View, 即页面浏览量或点击量,用户每次刷新即被计算一次. UV(独立访客):即Unique Visitor,访问您网站的一台电脑客户端为一个访客.00:00-24:00 ...
- 编译安装与gcc编译器
先说一下gcc编译器,只知道这是一个老款的编译器.编译的目的也比较重要,就是将c语言的代码编译成可以执行的binary文件. gcc 简单使用(后期补充) eg: gcc example.c # ...
- Canvas 放烟花合集 -- 用粉丝头像做成烟花绽放🧨
"我对着烟花许愿,希望你永远在我身边" "凑不够满天星辰那就去看看烟花吧,人间烟火气,最抚凡人心" 小tips:喜欢的可以关注博主私信代码噢~ 也可以看看前面两 ...
- Redis网络库源码分析(2)之启动服务器
一.从main开始 main函数定义在server.c中,它的内容如下: //server.c int main() { signal(SIGPIPE, SIG_IGN); //忽略SIGPIPE信号 ...
- Java的基本数据类型和数据类型转换
首先java属于强类型语言,要求变量的使用要严格遵守规范,所有变量都必须先定义后才能使用. Java的数据类型分为以下两种: 1 基础数据类型(primtive type) 和 2 引用数据类型(re ...
- 攻防世界 Misc 新手练习区 如来十三掌 Writeup
攻防世界 Misc 新手练习区 如来十三掌 Writeup 题目介绍 题目考点 佛曰加密.base64.Rot13等加密方法的了解 Writeup 下载并打开附件 联想到佛曰加密,复制内容到 佛曰加密 ...
- 无法复现的“慢”SQL《死磕MySQL系列 八》
系列文章 四.S 锁与 X 锁的爱恨情仇<死磕MySQL系列 四> 五.如何选择普通索引和唯一索引<死磕MySQL系列 五> 六.五分钟,让你明白MySQL是怎么选择索引< ...
- WPF进阶技巧和实战09-事件(1-路由事件、鼠标键盘输入)
理解路由事件 当有意义的事情发生时,有对象(WPF的元素)发送的用于通知代码的消息,就是事件的核心思想.WPF通过事件路由的概念增强了.NET事件模型.事件由允许源自某个元素的事件由另一个元素引发.例 ...