MySQL order by 语句对null值排序

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

up-1f782e29417cad4faa623a6cb47d132e51e.png

 

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

up-5699ffec54d64d6605840e8badcf03ed759.png

总结

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值