今天在寫sql中,遇到對 null 值進行排序的問題,發如今MySQL中,null爲最小值。
若是咱們在排序字段中,存在null的狀況,那麼咱們須要手動指定 null 的順序。
先看一下原始數據
![](http://static.javashuo.com/static/loading.gif)
- 將null值放在最後。
select *from userorder by i f(isnull(rank), 1, 0),rank asc,create_time desc;
查詢結果以下
(先按rank升序,null放在最後,在對null值根據時間降序排列)
- 將null值放在最前
select rank,create_timefrom userorder 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可省略不寫。反之,也是如此。