MySQL order by 語句對null值排序

今天在寫sql中,遇到對 null 值進行排序的問題,發如今MySQL中,null爲最小值。
 
若是咱們在排序字段中,存在null的狀況,那麼咱們須要手動指定 null 的順序。
 
 先看一下原始數據
 
  • 將null值放在最後。
select *
from user
order by i f(isnull(rank), 1, 0),rank asc,create_time desc;
 查詢結果以下
(先按rank升序,null放在最後,在對null值根據時間降序排列)

 

  • 將null值放在最前
select rank,create_time
from user
order by if(isnull(rank), 0, 1),rank asc,create_time desc;

總結sql

關鍵點在於if(isnull(字段名),0,1),將該字段根據是否爲null值分紅兩個部分,null值至關於獲得了隱藏的排序值0,非null值至關於獲得了隱藏的排序值1,在排序時,先根據此隱藏的排序值進行排序,而後根據條件依次排序。if(isnull(rank), 0, 1) 至關於if(isnull(rank), 0, 1) asc,asc可省略不寫。反之,也是如此。
相關文章
相關標籤/搜索