首页 > 代码库 > mysql排序null值
mysql排序null值
从现实项目需求出发;
有一张城市表;
里面有北京、上海、广州、河北、天津、河南6座城市;
mysql> select * from bjy_order;
+----+------+
| id | city |
+----+------+
| 1 | 北京 |
| 2 | 上海 |
| 3 | 广州 |
| 4 | 河北 |
| 5 | 天津 |
| 6 | 河南 |
+----+------+
SQL
Copy
要求是让上海排第一个、天津排第二个;
最简单粗暴的方法就是添加一个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
Copy
这么做确实能满足需求;
但是如果表里面有中国全部的32个省呢?
再如果来个全国的县市表几百个数据呢?
而我们只是想让某几个值排最前面就好了;
就如人们大部分人只知道世界第一高峰是珠穆朗玛峰而不去关注第二第三一样;
我们应该首先想到的就是只给需要排在前面的加上排序数字;其他为NULL;
mysql> select * from bjy_order;
+----+------+--------------+
| id | city | order_number |
+----+------+--------------+
| 1 | 北京 | NULL |
| 2 | 上海 | 1 |
| 3 | 广州 | NULL |
| 4 | 河北 | NULL |
| 5 | 天津 | 2 |
| 6 | 河南 | NULL |
+----+------+--------------+
SQL
Copy
然后我们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
Copy
然而即将成功的时候让人沮丧的事情发生了;
那些为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
Copy
到此完美实现需求;
mysql排序null值
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。