今天在写sql中,遇到对 null 值进行排序的问题,发现在MySQL中,null为最小值。
如果我们在排序字段中,存在null的情况,那么我们需要手动指定 null 的顺序。
先看一下原始数据
![up-fb6d8d410d283d117304f3daab0940978b4.png](https://i-blog.csdnimg.cn/blog_migrate/03501414276a8af69093095c54ea143c.png)
- 将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;
总结
关键点在于if(isnull(字段名),0,1),将该字段根据是否为null值分成两个部分,null值相当于得到了隐藏的排序值0,非null值相当于得到了隐藏的排序值1,在排序时,先根据此隐藏的排序值进行排序,然后根据条件依次排序。if(isnull(rank), 0, 1) 相当于if(isnull(rank), 0, 1) asc,asc可省略不写。反之,也是如此。