MySQL ORDER BY IF() 条件排序
在做sqlzoo的時(shí)候,碰到一個(gè)SQL的排序問(wèn)題,他把符合條件的單獨(dú)幾行,可以放在查詢結(jié)果的開(kāi)始,或者查詢結(jié)果的尾部
通過(guò)的方法就是IN語(yǔ)句(也可以通過(guò)IF語(yǔ)句)
?
自己做了個(gè)測(cè)試,如下,這個(gè)是表的所有內(nèi)容
?
使用ORDER BY配合IF語(yǔ)句
比如我想將species為snake的行數(shù),單獨(dú)列出來(lái),我可以這樣查詢
SELECT * FROM pet ORDER BY if (species='snake',0,1),species;
結(jié)果如下
我們可以看到,species為snake的行數(shù),被強(qiáng)行放置到了查詢結(jié)果開(kāi)頭
這是怎么做到的呢?
這里需要注意:
if (species='snake',0,1),species;
這句話的意思是,我對(duì)species進(jìn)行排序的同時(shí),給species附加一個(gè)隱藏屬性,這個(gè)隱藏屬性,可以是0或者1
什么意思呢?就是在對(duì)species排序的時(shí)候,優(yōu)先級(jí)是判斷species是否為snake,如果是,返回0,如果不是,返回1.
隨后,先進(jìn)行species隱藏屬性的排序,隱藏屬性拍完以后,再進(jìn)行剩余species的排序
也就是說(shuō),你可以把這個(gè) if 語(yǔ)句,看成是一個(gè)獨(dú)立的column
?
那如果我們想把snake的這一行放在查詢結(jié)果尾部呢?
那你可以這樣寫 ?SELECT * FROM pet ORDER BY if(species='snake',0,1)?DESC,species;
正如上面一段說(shuō)的,你可以把if 語(yǔ)句看成是獨(dú)立的column,所以你也可以為他添加排序條件ASC或者DESC,當(dāng)然默認(rèn)是ASC,可以不寫。
這樣,查詢就等于第一步是查詢隱藏屬性0,1,然后進(jìn)行DESC排序,因?yàn)閟pecies=snake的返回值是0,所以進(jìn)行倒序排列時(shí),就被排在了最后
?
?
以此類推,你在進(jìn)行隱藏屬性優(yōu)先排序的同時(shí),對(duì)于剩下的排序,你也可以另外進(jìn)行ASC或者DESC的排序,就不截圖了。
?
?
使用ORDER BY配合IN語(yǔ)句
上面一個(gè)是滿足單個(gè)條件,返回0或者1,那如果需要用到一個(gè)范圍呢?你可以使用IN語(yǔ)句
比如下面,我要求把出生日期為1993-02-04或者1989-05-13的行數(shù),排在最后
SELECT * FROM pet ORDER BY?birth IN('1993-02-04','1989-05-13'),birth;
這樣的話,birth IN語(yǔ)句會(huì)進(jìn)行判斷,如果birth滿足條件,返回1,不滿足,返回0
所以,滿足條件的兩行,因?yàn)榉祷刂凳?,進(jìn)行ASC排序的時(shí)候,就被放置在了最后。
總結(jié)
以上是生活随笔為你收集整理的MySQL ORDER BY IF() 条件排序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 龙山红军烈士墓在哪儿
- 下一篇: 面试前需要准备的五个步骤