MySQL ORDER BY IF 條件排序

2022-07-12 13:36:09 字數 1636 閱讀 2018

在做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的行數,排在最後

這樣的話,birth in語句會進行判斷,如果birth滿足條件,返回1,不滿足,返回0

所以,滿足條件的兩行,因為返回值是1,進行asc排序的時候,就被放置在了最後。

進度條,步驟條,

1,記錄一次步驟條來實現人數不同顯示的進度不同 效果如圖 廢話不多說 上 html檔案 已有 位武魂使共赴蒼嵐 3w預約 5w預約 10w預約 20w預約 30w預約 css awards progress awards progress cur awards progress cur.item0 ...

橫向滾動條(滑動條)

asp.net的gridview本身不帶滾動條,可通過panel實現。但是windows自帶的橫向滾動條只支援顯示在下方,為了使用方便,需要在上下方都顯示橫向滾動條。查詢了很多方法,有些不能實現 被滾動內容的寬度未知,但使用這種方法必須已知 其它的不能完全相容這些瀏覽器 ie6,firefox,ch...

一條分兩條

一條拆成兩條 統計當前客戶經理和客戶關係,上年底客戶經理和客戶關係 如果客戶經理和客戶關係跨越這兩個時間段,那麼一條分成兩條 with basic t as 客戶和客戶經理關係表 select 123 cust no,a am no,20091231 start dt 29991231 end dt...