日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

MySQL ORDER BY IF() 条件排序

發布時間:2024/9/19 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL ORDER BY IF() 条件排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在做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() 条件排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。