在做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() 条件排序相关推荐

  1. c++ sort 从大到小排序_算法的艺术:MySQL order by对各种排序算法的巧用

    在 [精华]洞悉MySQL底层架构:游走在缓冲与磁盘之间 这篇文章中,我们介绍了索引树的页面怎么加载到内存中,如何淘汰,等底层细节.这篇文章我们从比较宏观的角度来看MySQL中关键字的原理.本文,我们 ...

  2. MySQL order by的不同排序规则

    explain语句执行的结果中,Extra项中含有Using filesort表示需要排序,MySQL会给每个线程分配一块内存用于排序,称为sort_buffer. 全字段排序 全字段排序在内存中进行 ...

  3. SQL语句 ORDER BY 多条件排序优先级(嵌套if语句)

    需求 需求是,先根据A字段排序,排好序后得到一系列结果.然后再根据得到的结果根据B字段排序,得到最终结果. 按照这样排好序的顺序是这样的:把符合条件的单独几行,可以放在查询结果的开始,或者查询结果的尾 ...

  4. Order by 多条件排序

    首先了解一下基础知识: order by可以按一个或多个(最多16个)字段排序查询结果,可以是升序(ASC)也可以是降序(DESC),如果缺省,则是升序. order by中如果定义了多个字段,则按照 ...

  5. mysql order by if()或order by in()条件排序

    转载自:https://blog.csdn.net/weixin_38626799/article/details/80107697 在做sqlzoo的时候,碰到一个SQL的排序问题,他把符合条件的单 ...

  6. mysql order by 多字段排序

    工作中需用到order by 后两个字段排序,但结果却产生了一个Bug,以此备录. [1]复现问题场景 为了说明问题,模拟示例数据库表students,效果同实例. 如下语句Sql_1: 1 SELE ...

  7. mysql自定义两个条件排序_使用MySQL中的两个不同列进行自定义排序?

    为此,将ORDER BY子句与CASE语句一起使用.让我们首先创建一个表-mysql> create table DemoTable1610 -> ( -> Marks int, - ...

  8. MySQL ORDER BY 使用自定义排序顺序

    ORDER BY 子句可以使用FIELD() 函数为列中的值定义自定义的排序顺序. 例如下表: +----------------+ | orders | +----------------+ | o ...

  9. MYSQL数据库(十)- 数据表的插入(insert)、删(delete)、改(update)、查(select)、group by 分组、having语句设置分组条件,order by查询结果排序,

    目录结构 本章目录 一.插入insert: 方法一:insert标准插入数据写法 方法二:set插入数据写法 方法三:请看本章最后一个案例 二.插入update: 方法一:单表更新记录 方法二:多表更 ...

最新文章

  1. J2EE Java泛型的好处
  2. 合成存储方法,局部/全局变量
  3. 让vs2008支持jQuery的智能提示!
  4. sklearn中ValueError: Unknown label type: ‘continuous‘错误解决
  5. Android开发周报:Google 推出AR SDK、Android 8.0 Oreo 最终版发布
  6. git 客户端_适用于Mac的10个最佳GUI Git客户端
  7. 如何在Windows XP下安装Windows2000
  8. 、nohup 不中断后台执行
  9. java期末考试工程项目_java web 期末项目实验源码20套,自用学习非常不错!
  10. QT-程序依赖打包-windeployqt方式(简述版)
  11. Python系列之Python-docx生成运行日报Word模板
  12. 数学知识:扩展欧几里得算法
  13. Word 2016 撰写论文(6): 取消/撤销 自动编号
  14. 考研数学要背诵的知识点
  15. Web.17.EL表达式JSTL标签的使用
  16. SuperSet连接mysql设置
  17. 外仁内圣,以借得天下,以情御英雄
  18. 虚拟服务器有没有加入bt端口,三分钟学会架设BT服务器
  19. selenium成功绕过淘宝登录反爬机制!
  20. ASM原理详解,以及使用附代码,AOP利器

热门文章

  1. html图片怎么设置悬浮效果,图片漂浮效果js实现
  2. 金融行业容器平台落地路径:敏捷响应业务更迭
  3. 当前框架下微服务开发注意事项 @Arthur
  4. Zend Studio 0x80070666错误解决
  5. 安装win7时,无法创建新的分区系统和无法定位现有分区系统
  6. 分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(4月2日-4月8日)
  7. 30天敏捷生活(3):设计你的生活看板
  8. 局域网常用的DOS命令查IP
  9. python开发系列
  10. Web消息主体风格(Message Body Style)