在开发中遇到了查询REMUNERATION_OTHER表数据,通过对ADD_MONTH和CREATE_TIME列数据进行倒序排序,相同ADD_MONTH字段对CREATE_TIME存在空值放在最后。
SELECT * FROM REMUNERATION_OTHER;
在使用如下语句进行排序查询:
SELECT ADD_MONTH,BOOK_ID,BOOK_NAME,PEN_NAME,BEFORE_INCOM,AFTER_INCOME,CREATE_TIME,REMARK
FROM REMUNERATION_OTHER
ORDER BY ADD_MONTH DESC,CREATE_TIME DESC;
会出现如下结果
我们会发现相同的ADD_MONTH使用CREATE_TIME倒序排序,但是我们将会看到同样ADD_MONTH字段为202008,CREATE_TIME为空的数据将会出现在查询结果集的顶部这样的数据与我们预期的数据不一致。
这时候可以使用NULLS LAST来达到我们想要的结果:
SELECT ADD_MONTH,BOOK_ID,BOOK_NAME,PEN_NAME,BEFORE_INCOM,AFTER_INCOME,CREATE_TIME,REMARK
FROM REMUNERATION_OTHER
ORDER BY ADD_MONTH DESC,CREATE_TIME DESC NULLS LAST;
从上图能够看到 NULLS LAST 这个函数放在ORDER BY 之后是将空数据值在最后,那么NULLS FIRST就很好的理解为将空数据放在开头。这样NULLS LAST 、NULLS FIRST这两个函数将我们需要对存在空数据列进行排序,将空值放在最前或者最后,来达到我们想要的结果。至于为什么会在使用DESC排序的时候,空值会出现在最前面,是由于在ORCALE中默认null为最大值,这时候使用倒序就会出现空值在最前。
相关文章: