计算雪花中的十分位数间隔
Calculating Decile Intervals in Snowflake
我有一个相对简单(希望如此)的 Snowflake SQL 问题,我一直无法在网上自行回答。为了简单起见,假设我有一个简单的 table,其中包含一个 ID 列和一个值列。
Id | Value
-------------------
A | 100 |
B | 245 |
C | 80 |
D | 370 |
E | 65 |
我想计算值列的十分位桶。到目前为止,我只找到了将十分位排名添加为附加列的命令,将每个值排名在 0-9 之间。然而,这并不是我所需要的。我更有兴趣看看这些十分位数到底是什么。例如,对于十分位数 0,我想知道它跨越的时间间隔,比如说看起来像 [0,99) 的东西。有人知道如何生成这些数据吗?谢谢!
您可以使用聚合:
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 SQL 问题,我一直无法在网上自行回答。为了简单起见,假设我有一个简单的 table,其中包含一个 ID 列和一个值列。
Id | Value
-------------------
A | 100 |
B | 245 |
C | 80 |
D | 370 |
E | 65 |
我想计算值列的十分位桶。到目前为止,我只找到了将十分位排名添加为附加列的命令,将每个值排名在 0-9 之间。然而,这并不是我所需要的。我更有兴趣看看这些十分位数到底是什么。例如,对于十分位数 0,我想知道它跨越的时间间隔,比如说看起来像 [0,99) 的东西。有人知道如何生成这些数据吗?谢谢!
您可以使用聚合:
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()
可能不会按照您期望的方式处理关系。但关键是,如果你能在一个额外的列中得到逻辑,那么聚合就得到你想要的范围。