mysql中排序字段值为空时

作者: 忘川之曼殊沙华 | 来源:发表于2021-04-28 17:42 被阅读0次

    结局排序字段为空时,不参与排序

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

    SELECT
        doc.* 
    FROM
        hk_component_doc doc 
    WHERE
        doc.com_type = 200 
    ORDER BY
        -doc.com_sort DESC,
        doc.com_name ASC 
    
    image.png

    方法2:重新生成一列,比如sortnull,利用is null操作符,把NULL值的行变成1,非NULL值的行变成0,先对该字段排序,再对sort排序

    SELECT
        doc.* ,
        doc.com_sort is NULL as sortNull
    FROM
        hk_component_doc doc
    WHERE
        doc.com_type = 200 
    ORDER BY
        sortNull ASC,
        doc.com_sort,
        doc.com_name ASC
    
    image.png

    方法3:直接利用isnull函数对sort列求值,跟上一种方法的道理是一样的

    SELECT
        * 
    FROM
        hk_component_doc 
    WHERE
        com_type = 200 
    ORDER BY
        ISNULL( com_sort ) ASC,
        com_sort,
        com_name ASC
    
    image.png

    方法3:在order by 后面使用case when

    SELECT
        doc.* 
    FROM
        hk_component_doc doc 
    WHERE
        doc.com_type = 200 
    ORDER BY
    CASE
            
            WHEN doc.com_sort IS NULL THEN
            1 ELSE 0 
        END,
        doc.com_sort ASC,
    CASE
            
            WHEN doc.com_name IS NULL THEN
            1 ELSE 0 
        END,
        doc.com_name ASC
    
    image.png

    相关文章

      网友评论

        本文标题:mysql中排序字段值为空时

        本文链接:https://www.haomeiwen.com/subject/kcavrltx.html