Sql 如何根据不同的标准划分组
我试图根据A到F列的值将测试组和控制组分配给下表 最后,我想要一张如下所示的桌子。如果不同的ZIP对所有列具有相同的值,则将一半ZIP分配给测试,另一半分配给控制。如果拉链的总数不能平均分配,那么就给控件额外的拉链Sql 如何根据不同的标准划分组,sql,oracle,testing,case-when,ab-testing,Sql,Oracle,Testing,Case When,Ab Testing,我试图根据A到F列的值将测试组和控制组分配给下表 最后,我想要一张如下所示的桌子。如果不同的ZIP对所有列具有相同的值,则将一半ZIP分配给测试,另一半分配给控制。如果拉链的总数不能平均分配,那么就给控件额外的拉链 您可以使用行编号()和mod(): row\u number()为共享相同(A、B、C、D、E、F)值的记录分配递增的数字,按递增的zip顺序排列。我们会将偶数行分配给测试组T,将非偶数分配给组C,我认为分层抽样可以满足您的要求: select t.*, (case
您可以使用
行编号()
和mod()
:
row\u number()
为共享相同(A、B、C、D、E、F)
值的记录分配递增的数字,按递增的zip
顺序排列。我们会将偶数行分配给测试组T
,将非偶数分配给组C
,我认为分层抽样可以满足您的要求:
select t.*,
(case when mod(row_number() over (order by a, b, c, d, e, f), 2) = 1
then 'C' else 'T'
end) as test_group
from t;
这并不是问题的确切措辞,但它应该具有相同的效果,将列中具有相同值的行均匀地拆分为两组。当有奇数时,有时额外的数据将用于测试,有时用于控制
这个问题不清楚你是否想要平衡的控制组和测试组——这正是我所期望的。如果你真的想让所有奇数组都去控制(如你所建议的),那么所有的单数组都将在控制中,这对我来说似乎有偏见。你对奇数组的定义将导致一个有偏见的控制组,因为所有的单数组最终都会在该组中。这太好了,谢谢!奇数用于测试或控制并不重要,所以这正是我需要的@狮子。你的问题措辞不同,这就是为什么我在这个答案中阐述了这么多。我猜分层抽样正是你想要的。这通常是将数据分成两个统计上相似的组的最佳方法。欢迎@Lion!如果这正确回答了您的问题,请单击复选标记。。。谢谢
select t.*,
(case when mod(row_number() over (order by a, b, c, d, e, f), 2) = 1
then 'C' else 'T'
end) as test_group
from t;