数据集拆分70-30 SQL



我有一个数据集,我想将其拆分为两组,拆分为70/30。我也希望拆分是随机的,但1个ID下的所有项目都必须在拆分的同一组中,无论是70还是30。我想知道使用SQL(红移(做这件事的最佳方法是什么。我试过使用NTILE,但它不太开放。我尝试的是

with a as (select *,ntile(10) over (order by ID) tile
from table)
select *, case when tile <= 7 then 1 else 0 as bucket
from a 

谢谢。

示例数据:

YYY
用户ID第3列
123214123abc
544354342abcN
43241231定义
231213123defY
123123123abc

考虑到您的限制,您不能使用ntile(),因为它专注于使bucket大小合适。相反,您可以使用rank():

select t.*,
(case when seqnum < cnt * 0.7 then 1 else 0 end) as bucket
from (select t.*,
rank() over (order by md5(id), id) as seqnum,
count(*) over () as cnt
from t
) t;

注意,这任意地使用md5()来向每个id分配随机值。这是可重复的。获得不同桶的一种简单方法是";盐";带有另一个字符串的值。

最新更新