 特定条件排序)
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排序的时候就被放置在了最后。