select * from criss_sales;

Oracle分析函数-nulls first/nulls last-LMLPHP

通过rank()、dense_rank()、row_number()对记录进行全排列、分组排列取值
但有时候,会遇到空值的情况,空值会影响得到的结果的正确性,如下所查。

select
dept_id
,sale_date
,goods_type
,sale_cnt
,rank() over (partition by dept_id order by sale_cnt desc)
from criss_sales;

Oracle分析函数-nulls first/nulls last-LMLPHP

我们可以看到部门D01中的销售数量为NULL的记录排名居然是第一,这显然是不对的。

此时,就需要用到nulls last来处理
处理后结果如下:

select
dept_id
,sale_date
,goods_type
,sale_cnt
,rank() over (partition by dept_id order by sale_cnt desc nulls last)
from criss_sales;

Oracle分析函数-nulls first/nulls last-LMLPHP

这样就得到了期望的结果。
nulls first/nulls last可以帮助我们在处理含有空值的排序排列中,将空值字段记录放到最前或最后显示,帮助我们得到期望的结果。

04-28 11:36