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         |+----+------+--------------+

到此完美实现需求;

时间: 2024-12-11 13:11:37

mysql排序让空值NULL排在数字后边的相关文章

sqlserver、oracle数据库排序空值null问题解决办法

转:https://www.cnblogs.com/pacer/archive/2010/03/02/1676371.html [sqlserver]: sqlserver 认为 null 最小. 升序排列:null 值默认排在最前. 要想排后面,则:order by case when col is null then 1 else 0 end ,col 降序排列:null 值默认排在最后. 要想排在前面,则:order   by case when col is null then 0 el

【MySQL】探究之null与not null

相信很多用了mysql很久的人,对这两个字段属性的概念还不是很清楚,一般会有以下疑问: 我字段类型是not null,为什么我可以插入空值 为毛not null的效率比null高 判断字段不为空的时候,到底要 select * from table where column <> '' 还是要用 select * from table where column is not null 呢. 带着上面几个疑问,我们来深入研究一下null 和 not null 到底有什么不一样. 首先,我们要搞清

mysql 排序

一.主要内容简介 MySQL排序是个老生长谈的话题,这次我们想由浅入深详细说说MySQL的几种排序模式,怎么选择不同排序模式,以及如何优化排序. 同时也希望通过本文能解决大家的几个疑问: MySQL什么时候做排序,怎么判断需要进行排序: MySQL有几种排序模式,有什么方法让MySQL选择不同的排序模式: MySQL排序跟 read_rnd_buffer_size 有啥关系,在哪些情况下增加 read_rnd_buffer_size 能优化排序效率: 怎么判断MySQL使用了磁盘排序,怎么避免或

【程序员眼中的统计学(5)】排列组合:排序、排位、排

排列组合:排序.排位.排 作者 白宁超 2015年10月15日18:30:07 摘要:程序员眼中的统计学系列是作者和团队共同学习笔记的整理.首先提到统计学,很多人认为是经济学或者数学的专利,与计算机并没有交集.诚然在传统学科中,其在以上学科发挥作用很大.然而随着科学技术的发展和机器智能的普及,统计学在机器智能中的作用越来越重要.本系列统计学的学习基于<深入浅出统计学>一书(偏向代码实现,需要读者有一定基础,可以参见后面PPT学习).正如(吴军)先生在<数学之美>一书中阐述的,基于统

最简单快速的排序法之桶排法

前提:0-100内的随机数N个,实现从小到大(从大到小)排序. 实现:新建一个长度为101的数组,value初始化为0.数组每个key代表0-100中的数字,value值表示0-100中任意一个数组的出现次数. 通俗点说就是每个key代表一个桶,我们有101个桶,每个桶上表上数字0-100.把要排序的数字扔到对应的桶里,桶里扔一个数字时相应的key的value值就+1,表示桶里有几个数字. 代码实现: $numbers = array(63,6,98,54,88,5,89,16,59,10,31

MySQL排序:SELECT ORDER BY

SELECT 和ORDER BY结合进行排序: products表如下: a 按产品名称列进行排序: b 按多个列进行排序,默认排序顺序为升序: c 指定排序方向,即指定为降序: d 对多个列进行排序,先按产品价格降序排列,再按产品名称排列 e 找出某一列最高值或者最低值 MySQL排序:SELECT ORDER BY,布布扣,bubuko.com

14.输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)

待完善! 转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4259199.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目: 输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字.要求时间复杂度是O(n).如果有多对数字的和等于输

在排序好的数组插入一个数字,数字要插入到合适的位置上

最近在看以前大一看过的一本书<JAVA开发实战经典>李兴华写的,每看一次以前看过的书,收获都是不一样的,很多东西以前不明白,现在一看恍然大悟的感觉: 这道题目是书上的习题,没给参考答案,我在网上也没找到好点的,就发上来,感觉这个算法还可以优化得更好,希望高手指点 // 在排序好的数组插入一个数字,数字要插入到合适的位置上 int intArr[] = { 11, 22,33, 44, 55, 66, 77}; int insertNum = 34; //找到要插入的位置 int insertI

freemarker中空值 null的处理 ?exists ?if_exists ?default(“”)

exists用在逻辑判断,而if_exists用来打印东西 eg 1:<#if listBlogPost?exists && listBlogPost.size != 0 >    判断list 是否为空 eg 2:${s?if_exists}   判断 s 是否为空,不为空就打印 freemarker中空值 null的处理 ?exists ?if_exists ?default(“”) freemarker中空值 null的处理 ?exists ?if_exists ?def