mysql中排序字段值为空时

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

方法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中排序字段值为空时)