[英]Assign weighted value to rows using SQL
我有一张要分配测试组的客户表。 我想根据加权值分配一个测试组。
例子:
Group 1 - 50%
Group 2 - 25%
Group 3 - 20%
Group 4 - 5%
结果:
客户ID | 团体 |
---|---|
1 | 第 1 组 |
2 | 第 4 组 |
3 | 第 1 组 |
4 | 第 2 组 |
5 | 第 1 组 |
6 | 第 1 组 |
7 | 第 2 组 |
8 | 第 1 组 |
9 | 第 3 组 |
10 | 第 1 组 |
如果您随机打乱行,则可以根据累积频率进行拆分。 虽然这可以很好地工作,但分数很整洁,但我不确定这是否会满足您所拥有的最普遍的情况。
with data as (
select *,
count(*) over () * 1.0 as cnt,
row_number() over (order by random()) * 1.0 as rn
from T
)
select customer_id,
case when rn / cnt <= 0.50 then 'Group 1'
when rn / cnt <= 0.75 then 'Group 2'
when rn / cnt <= 0.95 then 'Group 3'
when rn / cnt <= 1.00 then 'Group 4'
end as grp
from data;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.