mysql排序null值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql排序null值相关的知识,希望对你有一定的参考价值。

从现实项目需求出发;
有一张城市表;
里面有北京、上海、广州、河北、天津、河南6座城市;

mysql> select * from bjy_order;
+----+------+
| id | city |
+----+------+
|  1 | 北京 |
|  2 | 上海 |
|  3 | 广州 |
|  4 | 河北 |
|  5 | 天津 |
|  6 | 河南 |
+----+------+
SQL

要求是让上海排第一个、天津排第二个;
最简单粗暴的方法就是添加一个order_number字段;
用来标识顺序的;
然后通过order by order_number asc 排序

``

mysql> select * from bjy_order order by order_number asc;
+----+------+--------------+
| id | city | order_number |
+----+------+--------------+
|  2 | 上海 |            1 |
|  5 | 天津 |            2 |
|  1 | 北京 |            3 |
|  3 | 广州 |            4 |
|  4 | 河北 |            5 |
|  6 | 河南 |            6 |
+----+------+--------------+
SQL

这么做确实能满足需求;
但是如果表里面有中国全部的32个省呢?
再如果来个全国的县市表几百个数据呢?
而我们只是想让某几个值排最前面就好了;
就如人们大部分人只知道世界第一高峰是珠穆朗玛峰而不去关注第二第三一样;
我们应该首先想到的就是只给需要排在前面的加上排序数字;其他为NULL;

mysql> select * from bjy_order;
+----+------+--------------+
| id | city | order_number |
+----+------+--------------+
|  1 | 北京 | NULL         |
|  2 | 上海 |            1 |
|  3 | 广州 | NULL         |
|  4 | 河北 | NULL         |
|  5 | 天津 |            2 |
|  6 | 河南 | NULL         |
+----+------+--------------+
SQL

然后我们order by一下;

mysql> select * from bjy_order order by order_number asc;
+----+------+--------------+
| id | city | order_number |
+----+------+--------------+
|  1 | 北京 | NULL         |
|  3 | 广州 | NULL         |
|  4 | 河北 | NULL         |
|  6 | 河南 | NULL         |
|  2 | 上海 |            1 |
|  5 | 天津 |            2 |
+----+------+--------------+
SQL

然而即将成功的时候让人沮丧的事情发生了;
那些为NULL的排在在最前面;
OK;下面有请今天的主角出场来解决这个问题;
我们来利用is null把sql给稍微改造一下即可;``

mysql> select * from bjy_order order by order_number is null,order_number asc;
+----+------+--------------+
| id | city | order_number |
+----+------+--------------+
|  2 | 上海 |            1 |
|  5 | 天津 |            2 |
|  1 | 北京 | NULL         |
|  3 | 广州 | NULL         |
|  4 | 河北 | NULL         |
|  6 | 河南 | NULL         |
+----+------+--------------+
SQL

到此完美实现需求;
技术分享

















以上是关于mysql排序null值的主要内容,如果未能解决你的问题,请参考以下文章

mysql排序null值

MySql排序查询将null放在最后的解决办法(默认会在最前,当成最小值处理)

mysql oder by排序把null的字段放在最后面

MySql排序查询将null放在最后的解决办法

MySQL数据库高阶语句之查询视图NULL值

MySQL进阶5--分组排序和分组查询 group by(having) /order by