雪花 - Dense_rank 从 2 而不是 1 开始

Posted

技术标签:

【中文标题】雪花 - Dense_rank 从 2 而不是 1 开始【英文标题】:Snowflake - Dense_rank starting at 2 rather than 1 【发布时间】:2021-11-17 21:04:47 【问题描述】:

我在查询中使用以下语句:

 CASE WHEN apercent IS NULL THEN NULL ELSE dense_rank() over (partition by adate order by apercent desc) END as arank

由于某种原因,排名结果从 2 而不是 1 开始。没有并列值,但有一些 NULL 值。我假设这是因为 NULL。有什么方法可以更新它以强制排名从 1 开始?

当前结果:

arank apercent
2 23.57
3 13.61
4 10.67
5 6.14
6 6.00
7 5.79
8 5.57
9 5.27
10 4.80
NULL NULL

期望的结果:

arank apercent
1 23.57
2 13.61
3 10.67
4 6.14
5 6.00
6 5.79
7 5.57
8 5.27
9 4.80
NULL NULL

【问题讨论】:

【参考方案1】:

如果您的百分比不能为负数,您可以使用 coalesce 来模仿 nulls last

case when apercent is null then null 
     else dense_rank() over (partition by adate order by coalesce(apercent,0.00) desc) 
end as arank

【讨论】:

【参考方案2】:

一个简单的解决方案是使用NULLS LAST:

(CASE WHEN apercent IS NOT NULL
      THEN dense_rank() over (partition by adate order by apercent desc nulls last)
 END) as arank

或者,您可以按NULL 值进行分区,这样它们就不会包含在非NULL 值的计数中:

(CASE WHEN apercent IS NOT NULL
      THEN dense_rank() over (partition by adate, apercent is null order by apercent desc)
 END) as arank

【讨论】:

谢谢,NULLS LAST 完美运行!

以上是关于雪花 - Dense_rank 从 2 而不是 1 开始的主要内容,如果未能解决你的问题,请参考以下文章

雪花数据仓库 - 使用字母数字字符而不是整数生成维度 id

雪花存储在使用抛出错误而不是返回错误时给出不同的错误

从雪花加载数组数据到neo4j

雪花:是不是有一个查询会返回我在创建表时设置的数据类型? int 到 int,而不是 int 到数字?

无法使用 Pyspark 从 EMR 集群连接到雪花

雪花是不是支持 sql server 中使用的几何数据类型?