今天在写sql中,遇到对 null 值进行排序的问题,发现在MySQL中,null为最小值。
 
如果我们在排序字段中,存在null的情况,那么我们需要手动指定 null 的顺序。
 
 先看一下原始数据
MySQL order by 语句对null值排序
 
  • 将null值放在最后。
select *
from user
order by i f(isnull(rank), 1, 0),rank asc,create_time desc;
 查询结果如下
(先按rank升序,null放在最后,在对null值根据时间降序排列)

MySQL order by 语句对null值排序

 

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

MySQL order by 语句对null值排序

总结

关键点在于if(isnull(字段名),0,1),将该字段根据是否为null值分成两个部分,null值相当于得到了隐藏的排序值0,非null值相当于得到了隐藏的排序值1,在排序时,先根据此隐藏的排序值进行排序,然后根据条件依次排序。if(isnull(rank), 0, 1) 相当于if(isnull(rank), 0, 1) asc,asc可省略不写。反之,也是如此。

 

相关文章: