计算雪花中的十分位间隔

Posted

技术标签:

【中文标题】计算雪花中的十分位间隔【英文标题】:Calculating Decile Intervals in Snowflake 【发布时间】:2018-07-31 15:35:33 【问题描述】:

我有一个相对简单的(希望如此)Snowflake SQL 问题,我无法在网上自己回答。为简单起见,假设我有一个简单的表,其中包含一个 ID 列和一个值列。

   Id |   Value
-------------------
  A   |  100 | 
  B   |  245 | 
  C   |  80  | 
  D   |  370 | 
  E   |  65  | 

我想计算值列的十分位桶。到目前为止,我只找到了将十分位等级添加为附加列的命令,将每个值排列在 0-9 之间。然而,这不是我所需要的。我更感兴趣的是看看这些十分位数实际上是什么。例如,对于十分位数 0,我想知道其跨越的间隔,例如,假设看起来像 [0,99)。有人知道如何生成这些数据吗?谢谢!

【问题讨论】:

【参考方案1】:

你可以使用聚合:

select tile, min(value), max(value)
from (select t.*, ntile(10) over (order by value) as tile
      from t
     ) t
group by tile
order by tile;

请注意,ntile() 可能无法按您期望的方式处理关系。但关键是,如果您可以在附加列中获取逻辑,那么聚合就会获得您想要的范围。

【讨论】:

以上是关于计算雪花中的十分位间隔的主要内容,如果未能解决你的问题,请参考以下文章

雪花中的哪些操作不消耗计算积分?

SnowFlake(雪花算法)

雪花算法

2022年雪花算法的最大与最小值

如何计算雪花中的日期差异?

雪花算法源码