我有一个包含用户ID和状态的表。我需要通过在另一个表中设置一个标志,将每个状态中20%的用户分配给一个控制组。我不知道如何才能确保这些数字是正确的。我怎么会开始这个呢?
答案 0 :(得分:1)
举个例子,看看这个sqlfiddle:
http://sqlfiddle.com/#!4/8e49d/6/0
with counts as
(select stateid, count(userid) as num_users
from userstates
group by stateid)
select *
from (select x.stateid,
x.userid,
sum(1) over(partition by x.stateid order by x.userid) as runner,
y.num_users,
sum(1) over(partition by x.stateid order by x.userid) / y.num_users as pct
from userstates x
join counts y
on x.stateid = y.stateid)
where pct <= .2
我做了几个假设:
- 我认为,如果你不能精确地拉20%,你会选择,例如,19%,而不是21%。如果你想在没有20%的情况下拉出1个ID超过20%时,你需要稍微改变一下这个问题(你不能选择一小部分用户名,所以你必须选择一种方式)。 / p>
- 我假设您不想要随机的20%,并且第一个用户ID的20%按顺序就足够了。如果您希望每组中的20%是随机的,我需要稍微更改查询。