在表里某个字段含有空值(NULL),这时候想把空值的统一排到前面或者后面,然后并不影响其他有值记录的正常排序。
方法一:在排序里添加判断
SELECT * FROM TABLE1 t ORDER BY t.COL1 IS NULL, t.COL1; -- 空值排后
SELECT * FROM TABLE1 t ORDER BY t.COL1 IS NOT NULL, t.COL1; -- 空值排前
同理也可以使用 IFNULL() 或者 ISNULL() 等方法在排序里进行判断。
方法二:将空值字段打个标记,再使用内联视图进行二次查询。
SELECT
*
FROM
( SELECT t.*, CASE WHEN t.COL1 IS NULL OR t.COL1 = '' THEN 1 ELSE 0 END IS_NULL FROM TABLE1 t ) v
ORDER BY
v.IS_NULL DESC,
v.COL1