根据表中的字段选择组和总体的百分比

时间:2014-02-18 21:25:50

标签: sql oracle plsql

我有一个包含用户ID和状态的表。我需要通过在另一个表中设置一个标志,将每个状态中20%的用户分配给一个控制组。我不知道如何才能确保这些数字是正确的。我怎么会开始这个呢?

1 个答案:

答案 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%是随机的,我需要稍微更改查询。