MySQL ORDER BY IF() 特定条件排序

发布时间:2026/10/29 1:14:01
MySQL ORDER BY IF() 特定条件排序 MySQL ORDER BY IF() 条件排序在做sqlzoo的时候碰到一个SQL的排序问题他把符合条件的单独几行可以放在查询结果的开始或者查询结果的尾部通过的方法就是IN语句也可以通过IF语句自己做了个测试如下这个是表的所有内容使用ORDER BY配合IF语句比如我想将species为snake的行数单独列出来我可以这样查询SELECT * FROM pet ORDER BY if (speciessnake,0,1),species;结果如下我们可以看到species为snake的行数被强行放置到了查询结果开头这是怎么做到的呢这里需要注意if (speciessnake,0,1),species;这句话的意思是我对species进行排序的同时给species附加一个隐藏属性这个隐藏属性可以是0或者1什么意思呢就是在对species排序的时候优先级是判断species是否为snake如果是返回0如果不是返回1.随后先进行species隐藏属性的排序隐藏属性拍完以后再进行剩余species的排序也就是说你可以把这个 if 语句看成是一个独立的column那如果我们想把snake的这一行放在查询结果尾部呢那你可以这样写 SELECT * FROM pet ORDER BY if(speciessnake,0,1) DESC,species;正如上面一段说的你可以把if 语句看成是独立的column所以你也可以为他添加排序条件ASC或者DESC当然默认是ASC可以不写。这样查询就等于第一步是查询隐藏属性0,1然后进行DESC排序因为speciessnake的返回值是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排序的时候就被放置在了最后。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询