1.1. NULL值排序
1.1.1. 前言
起因是对一个表单数据有新增一个日期字段的要求,新增数据后由于原先数据存在很多空值,导致对日期进行降序时,有日期的数据就会排在底部,显然不是我们想要的。
select date from example order by date desc;

1.1.2. 通过关键字NULLS LAST处理
SELECT *
FROM example
ORDER BY column_name NULLS LAST;
多列排序示例
SELECT *
FROM example
ORDER BY column1 DESC NULLS LAST, column2 ASC NULLS LAST;
此查询首先对 column1 按降序排序,并将其 NULL 值放在最后;然后对 column2 按升序排序,同样将其 NULL 值放在最后。
1.1.3. 通过coalesce函数
通过coalesce函数也可以解决这个问题,COALESCE是一个函数, (expression_1, expression_2, ...,expression_n),其中依照参数顺序,取第一个不为null的值。也就是说,进行排序时可以对排序字段进行判断,若所有字段都为NULL时,则返回NULL。
--排序时若存在date为NULL则替换为空字符串''
select date from example order by coalesce(date,'') desc;

1.1.4. 针对空字符串''
COALESCE 函数用于 “替换 NULL”,但可扩展为替换空字符串,将其映射为一个比所有可能非空字符串都大的值(如 'zzzzz'):
--升序:空字符串替换为 'zzzzz',排在最后
SELECT * FROM example
ORDER BY
COALESCE(NULLIF(content, ''), 'zzzzz') ASC -- NULLIF(content, ''):将 '' 转为 NULL,再用 'zzzzz' 替换
NULLS LAST; -- 原 NULL 也替换为 'zzzzz',排在最后

被折叠的 条评论
为什么被折叠?



