在有限大小的存储桶中拆分行

时间:2017-12-04 20:23:53

标签: sql oracle oracle11g

我有一个包含数千条记录的表,我想将每一行与一个存储桶相关联,每个存储桶最多都有一个与之关联的行。

我喜欢类似于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

1 个答案:

答案 0 :(得分:1)

您可以使用row_number()

select value, floor((row_number() over (order by value) - 1) / 3) as bucket
from t;

在这种情况下,我认为不需要单独的窗口函数。