MySQL ORDER BY 排序 IF 及 IN
来源:互联网 发布:东东数据cf刷枪教程 编辑:程序博客网 时间:2024/06/10 18:50
在做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排序的时候,就被放置在了最后。
其他情况以此类推
因为平时用的时候经常只是用IN来筛选,很少用到和排序相结合的,所以记录一下
- MySQL ORDER BY 排序 IF 及 IN
- mysql order by if
- MySQL排序:SELECT ORDER BY
- mysql order by内排序
- mysql排序order by新发现
- mysql排序ORDER BY Optimization
- SELECT IN ORDER BY CHARINDEX (排序)
- mysql order by in 的字符顺序
- mysql order by 排序 varchar 类型数据
- mysql order by 排序 varchar 类型数据
- MySQL排序检索数据----ORDER BY
- mysql 使用order by field() 自定义排序
- MYSQL ORDER BY 排序
- MySQL order by case when 排序
- mysql的排序检索顺序ORDER BY
- mysql order by 多字段排序
- mysql order by 中文排序 错乱问题
- mysql中order by 可以指定排序
- H5表单验证不得为空,自定义提示语
- MFC之三文本文件读写
- centos(vm)下单机安装flume1.6.0(x86)
- javaWEB总结(12):JSP页面的九个隐含对象
- HDU 5996 dingyeye loves stone (DFS+博弈)
- MySQL ORDER BY 排序 IF 及 IN
- Android studio新项目提交到git
- js中的Number对象操作
- servletconfig,servletcontext 笔记
- Java语言基础(六)之 —— 选择结构(if语句)
- MFC自绘Button按钮分析和实现
- 防止网站内容被采集
- 剑指offer学习笔记(Java实现)(1-10)
- js中的全局变量整理