当前位置 博文首页 > 小小舍的博客:mysql的order by排序时,有null值怎么办?

    小小舍的博客:mysql的order by排序时,有null值怎么办?

    作者:[db:作者] 时间:2021-08-09 18:55

    ?

    数据举例:

    ?

    以下几种排序方式及结果:

    1.null强制放在最后

    select id,sort from fwzl_house 
    where delFlag = 0 and id in (9807,9786,9638,9679)
    order by if(isnull(sort),1,0) , sort asc

    select id,sort from fwzl_house 
    where delFlag = 0 and id in (9807,9786,9638,9679)
    order by if(isnull(sort),0,1) desc , sort asc

    结果如下:

    ?

    2.将null强制放在最前

    select id,sort from fwzl_house 
    where delFlag = 0 and id in (9807,9786,9638,9679)
    order by if(isnull(sort),0,1) , sort asc
    

    select id,sort from fwzl_house 
    where delFlag = 0 and id in (9807,9786,9638,9679)
    order by if(isnull(sort),1,0) desc , sort asc

    结果如下:

    理解:

    以if(isnull(字段名),0,1)为例,它的意思是将该字段值为null得到一个隐含的排序属性0,值为非null的得到一个隐含的排序属性1,

    在排序的时候,先根据这一隐含属性进行升序排列,【因为if(isnull(字段名),0,1)相当于if(isnull(字段名),0,1) asc,省略了asc】,所以自然地,排序字段为null的那些行(隐含排序属性)会在最前。

    对于将null强制放在最后同理。

    ?

    ?

    cs