繁体   English   中英

使用 SQL 为行分配加权值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM