MySQL中order by排序时,数据存在null咋办

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL中order by排序时,数据存在null咋办相关的知识,希望对你有一定的参考价值。

order by排序是最常用的功能,但是排序有时会遇到数据为空null的情况,这样排序就会乱了,这里以mysql为例,记录我遇到的问题和解决思路。

问题:

网页要实现table的行鼠标拖拽排序,我用AngularJs集成了一个TableDnD开源插件,可以实现,然后在数据库表中增加一个排序字段indexId,但是原来的大量数据是没有排序过的,所以该字段为null。

这样order by时,为null的数据就会排在最前边。

写个测试表模拟一下,如下效果:

技术分享

解决办法:

  • 最优办法:利用MySQL中的一个小技巧,在字段前面加上一个负号,也就是减号,ASC改成DESC ,DESC改成ASC

技术分享

  • 重新生成一列,比如agenull,利用is null操作符,把NULL值的行变成1,非NULL值的行变成0,先对该字段排序,再对age排序

技术分享

  • 直接利用isnull函数对age列求值,跟第一种方法的道理是一样的

技术分享

方法同样试用SQL Server和Oracle等数据库

以上是关于MySQL中order by排序时,数据存在null咋办的主要内容,如果未能解决你的问题,请参考以下文章

mysql:group by,order by

关于mysql获取数据排序order by的问题

Mysql order by与limit混用陷阱

mysql order by 与 limit 混用陷阱

mysql中order by工作原理与调优

Mysql Order By 字符串排序,mysql 字符串order by