MySql脚本 asc 排序字段空值条目靠后的写法

场景:
mysql中如果使用正序 asc 排序,那么默认是把排序字段值为空的条目数据,优先排到前面,这明显不符合需求,解决如下

一、重现问题

-- 按排序号-正序
select shop_id,
       sort_num,
       update_time
from t_shop_trend_content
where shop_id = 'Q00402'
order by sort_num asc, update_time desc;

-- 按排序号-倒序
select shop_id,
       sort_num,
       update_time
from t_shop_trend_content
where shop_id = 'Q00402'
order by sort_num desc, update_time desc;

正序输出:

 倒叙输出:

小结:
1、由结果输出可以看到 desc 倒序没问题,排序字段值为空的排在后面
2、但是使用 asc 正序排序有问题,会把排序字段值为空的排在前面,不符合要求

二、使用 if() 函数解决

-- 按排序号-正序
select shop_id,
       sort_num,
       update_time
from t_shop_trend_content
where shop_id = 'Q00402'
order by if(sort_num is not null, sort_num, 10000000000) asc, update_time desc;

输出:

小结:
1、从结果看符合预期
2、排序字段非空才参与排序,为空直接给个大的默认值排到最后

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值