我有一个包含数千条记录的表,我想将每一行与一个存储桶相关联,每个存储桶最多都有一个与之关联的行。
我喜欢类似于ntile的“bucketize”分析函数,但是代替桶的数量需要每个桶的最大元素数。
有类似的吗?
select value, bucketize(3) as bucket
from table;
VALUE BUCKET
--------------
foo 1
bar 1
baz 1
qux 2
quux 2
zap 2
xfoo 3
xbar 3
xbaz 3
xqux 4
答案 0 :(得分:1)
您可以使用row_number()
:
select value, floor((row_number() over (order by value) - 1) / 3) as bucket
from t;
在这种情况下,我认为不需要单独的窗口函数。