MySQL使用order by column asc排序时,column值存在null,排在最前面

1.前言

最近在使用order by column排序时,本以为很自然的一个排序语句,没想到最后结果却出乎意料,导致没达到想要的排序结果。

在这里插入图片描述
不知道大家有没有遇到过这种情况哈,就是order by column,但是column中存在null值,这时候null会被排在最前面,然后才是根据column值的大小排序。下面我们来复现一下这种情况。

2.出现场景

create table order_test(
   id bigint primary key auto_increment comment '主键',
   ranking int comment '排名'
);
insert into order_test(ranking) values (null),(2),(3),(null),(1);

这时,我们测试表中的数据为:
在这里插入图片描述
此时,我们来测试一下排序:

select id,ranking from order_test order by ranking

得到的结果为下图所示:
在这里插入图片描述
可以看到,null值排在了最前面,这并不是我们想要的排序结果,我们所期望的是,有值的按照大小顺序排序,null值排在最后面。

3.问题原因

那么为什么会出现这样的现象,经过查询MySQL官方文档,了解到在MySQL中,MySQL将null值视为小于任何非null值。这是参考链接,有兴趣可以进行查阅。

在这里插入图片描述

4.解决方案

我们可以利用isnull(expr)函数的特性,If expr is NULL, ISNULL() returns 1, otherwise it returns 0。如果表达式的值为null则返回为1,否则返回0。

select isnull(ranking), id ,ranking from order_test;

在这里插入图片描述
这时我们可以利用isnull(ranking)对其进行排序,因此可以衍生出我们的解决思路:根据isnull(ranking),ranking进行排序。

select id ,ranking from order_test order by isnull(ranking), ranking;

排序结果
在这里插入图片描述
到此,问题顺利解决。
在这里插入图片描述

欢迎大家一起交流学习。

最后,欢迎关注微信公众号一起交流

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值