MySQL ORDER BY IF() 条件排序
在做sqlzoo的时候,碰到一个SQL的排序问题,他把符合条件的单独几行,可以放在查询结果的开始,或者查询结果的尾部
通过的方法就是IN语句(也可以通过IF语句)
自己做了个测试,如下,这个是表的所有内容
使用ORDER BY配合IF语句
比如我想将species为snake的行数,单独列出来,我可以这样查询
SELECT * FROM pet ORDER BY if (species='snake',0,1),species;
结果如下
我们可以看到,species为snake的行数,被强行放置到了查询结果开头
这是怎么做到的呢?
这里需要注意:
if (species='snake',0,1),species;
这句话的意思是,我对species进行排序的同时,给species附加一个隐藏属性,这个隐藏属性,可以是0或者1
什么意思呢?就是在对species排序的时候,优先级是判断species是否为snake,如果是,返回0,如果不是,返回1.
随后,先进行species隐藏属性的排序,隐藏属性拍完以后,再进行剩余species的排序
也就是说,你可以把这个 if 语句,看成是一个独立的column
那如果我们想把snake的这一行放在查询结果尾部呢?
那你可以这样写 SELECT * FROM pet ORDER BY if(species='snake',0,1) DESC,species;
正如上面一段说的,你可以把if 语句看成是独立的column,所以你也可以为他添加排序条件ASC或者DESC,当然默认是ASC,可以不写。
这样,查询就等于第一步是查询隐藏属性0,1,然后进行DESC排序,因为species=snake的返回值是0,所以进行倒序排列时,就被排在了最后
以此类推,你在进行隐藏属性优先排序的同时,对于剩下的排序,你也可以另外进行ASC或者DESC的排序,就不截图了。
使用ORDER BY配合IN语句
上面一个是满足单个条件,返回0或者1,那如果需要用到一个范围呢?你可以使用IN语句
比如下面,我要求把出生日期为1993-02-04或者1989-05-13的行数,排在最后
SELECT * FROM pet ORDER BY birth IN('1993-02-04','1989-05-13'),birth;
这样的话,birth IN语句会进行判断,如果birth满足条件,返回1,不满足,返回0
所以,满足条件的两行,因为返回值是1,进行ASC排序的时候,就被放置在了最后。
MySQL ORDER BY IF() 条件排序相关推荐
- c++ sort 从大到小排序_算法的艺术:MySQL order by对各种排序算法的巧用
在 [精华]洞悉MySQL底层架构:游走在缓冲与磁盘之间 这篇文章中,我们介绍了索引树的页面怎么加载到内存中,如何淘汰,等底层细节.这篇文章我们从比较宏观的角度来看MySQL中关键字的原理.本文,我们 ...
- MySQL order by的不同排序规则
explain语句执行的结果中,Extra项中含有Using filesort表示需要排序,MySQL会给每个线程分配一块内存用于排序,称为sort_buffer. 全字段排序 全字段排序在内存中进行 ...
- SQL语句 ORDER BY 多条件排序优先级(嵌套if语句)
需求 需求是,先根据A字段排序,排好序后得到一系列结果.然后再根据得到的结果根据B字段排序,得到最终结果. 按照这样排好序的顺序是这样的:把符合条件的单独几行,可以放在查询结果的开始,或者查询结果的尾 ...
- Order by 多条件排序
首先了解一下基础知识: order by可以按一个或多个(最多16个)字段排序查询结果,可以是升序(ASC)也可以是降序(DESC),如果缺省,则是升序. order by中如果定义了多个字段,则按照 ...
- mysql order by if()或order by in()条件排序
转载自:https://blog.csdn.net/weixin_38626799/article/details/80107697 在做sqlzoo的时候,碰到一个SQL的排序问题,他把符合条件的单 ...
- mysql order by 多字段排序
工作中需用到order by 后两个字段排序,但结果却产生了一个Bug,以此备录. [1]复现问题场景 为了说明问题,模拟示例数据库表students,效果同实例. 如下语句Sql_1: 1 SELE ...
- mysql自定义两个条件排序_使用MySQL中的两个不同列进行自定义排序?
为此,将ORDER BY子句与CASE语句一起使用.让我们首先创建一个表-mysql> create table DemoTable1610 -> ( -> Marks int, - ...
- MySQL ORDER BY 使用自定义排序顺序
ORDER BY 子句可以使用FIELD() 函数为列中的值定义自定义的排序顺序. 例如下表: +----------------+ | orders | +----------------+ | o ...
- MYSQL数据库(十)- 数据表的插入(insert)、删(delete)、改(update)、查(select)、group by 分组、having语句设置分组条件,order by查询结果排序,
目录结构 本章目录 一.插入insert: 方法一:insert标准插入数据写法 方法二:set插入数据写法 方法三:请看本章最后一个案例 二.插入update: 方法一:单表更新记录 方法二:多表更 ...
最新文章
- J2EE Java泛型的好处
- 合成存储方法,局部/全局变量
- 让vs2008支持jQuery的智能提示!
- sklearn中ValueError: Unknown label type: ‘continuous‘错误解决
- Android开发周报:Google 推出AR SDK、Android 8.0 Oreo 最终版发布
- git 客户端_适用于Mac的10个最佳GUI Git客户端
- 如何在Windows XP下安装Windows2000
- 、nohup 不中断后台执行
- java期末考试工程项目_java web 期末项目实验源码20套,自用学习非常不错!
- QT-程序依赖打包-windeployqt方式(简述版)
- Python系列之Python-docx生成运行日报Word模板
- 数学知识:扩展欧几里得算法
- Word 2016 撰写论文(6): 取消/撤销 自动编号
- 考研数学要背诵的知识点
- Web.17.EL表达式JSTL标签的使用
- SuperSet连接mysql设置
- 外仁内圣,以借得天下,以情御英雄
- 虚拟服务器有没有加入bt端口,三分钟学会架设BT服务器
- selenium成功绕过淘宝登录反爬机制!
- ASM原理详解,以及使用附代码,AOP利器