我有一个表,想将行拆分成批次(添加额外的列,如 batch_no )。
例如,我有一个单列 cust_no 和 total=20 行的表,并将它们分成 5 个批次,如 1、2、3、4 和 5。
预期输出如...
cust_no batch_no
23123 1
2313 1
23 1
323123 1
123 1
23 2
213 2
123 2
2123 2
2123 2
23123 3
2313 3
23 3
323123 3
123 3
23 4
...
...
...
...
答案 0 :(得分:3)
如果您知道批次数,则使用 ntile()
:
select t.*,
ntile(5) over (order by null) as batch
from t;
注意:order by null
表示您不关心排序。它是任意的,不可复制。您可能希望包含一些条件——例如 id 列或创建日期或其他内容,以便批次更加一致。
如果您想要特定大小的批次,请使用 row_number()
和算术:
select t.*,
(row_number() over (order by null) % 4) as batch
from t;
在某些数据库中,这将是:
select t.*,
mod(row_number() over (order by null), 4) as batch
from t;