不积跬步,无以至千里

博客园 首页 新随笔 联系 订阅 管理
select * from criss_sales;

通过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;
复制代码

我们可以看到部门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;
复制代码

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

posted on 2020-03-31 16:58  Zeroassetsor  阅读(118)  评论(0)    收藏  举报