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可以帮助我们在处理含有空值的排序排列中,将空值字段记录放到最前或最后显示,帮助我们得到期望的结果。
博客介绍了使用rank()、dense_rank()、row_number()对记录进行全排列、分组排列取值。但遇到空值会影响结果正确性,如部门D01中销售数量为NULL的记录排名异常。可使用nulls last处理,nulls first/nulls last能将空值字段记录放最前或最后,得到期望结果。
4660

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



