结局排序字段为空时,不参与排序
方法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
网友评论