设为首页 收藏本站
查看: 561|回复: 0

[经验分享] mysql排序让空值NULL排在数字后边

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-4-11 09:59:51 | 显示全部楼层 |阅读模式
从现实项目需求出发;
有一张城市表;里面有北京、上海、广州、河北、天津、河南6座城市;
1
2
3
4
5
6
7
8
9
10
11
mysql> select * from bjy_order;
+----+------+
| id | city |
+----+------+
|  1 | 北京 |
|  2 | 上海 |
|  3 | 广州 |
|  4 | 河北 |
|  5 | 天津 |
|  6 | 河南 |
+----+------+



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

1
2
3
4
5
6
7
8
9
10
11
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;

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



然后我们order by一下;
1
2
3
4
5
6
7
8
9
10
11
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给稍微改造一下即可;
1
2
3
4
5
6
7
8
9
10
11
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         |
+----+------+--------------+



到此完美实现需求;
QQ截图20160411095950.png


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-202465-1-1.html 上篇帖子: 读写分离mysql-proxy 下篇帖子: 修改mysql的密码 mysql
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表