mysql排序讓空值NULL排在數字後邊

從現實項目需求出發;

有一張城市表;裏面有北京、上海、廣州、河北、天津、河南6座城市;

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

要求是讓上海排第一個、天津排第二個;

最簡單粗暴的方法就是添加一個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 |
+----+------+--------------+

這麼做確實能滿足需求;但是如果表裏面有中國全部的32個省呢?

再如果來個全國的縣市表幾百個數據呢?而我們只是想讓某幾個值排最前面就好了;

就如人們大部分人只知道世界第一高峯是珠穆朗瑪峯而不去關注第二第三一樣;

我們應該首先想到的就是隻給需要排在前面的加上排序數字;其他爲NULL;

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

然後我們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 |
+----+------+--------------+

然而即將成功的時候讓人沮喪的事情發生了;那些爲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         |
+----+------+--------------+

到此完美實現需求;

白俊遙博客


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章