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;
排序结果:
到此,问题顺利解决。
最后,欢迎关注微信公众号一起交流
原文始发于微信公众号(阿喵程序园):MySQL使用order by column asc排序时,column值存在null,排在最前面
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/42835.html