首页 > 解决方案 > 如何在 Redshift 中做分层随机样本?

问题描述

我需要随机抽取从不同类别购买的客户样本。有8个类别,订单分布在其中。

如果我想对已购买的客户进行随机抽样,但保持每个类别的订单比例相同,我将如何在我的 sql 代码中进行设置?

突出显示这一点的表格如下(它不包括客户数据 - 我希望我的客户列表基于订单的代表性比例):

我正在使用的表可以在这里找到:https ://imgur.com/a/Q0lMHWf

标签: sqlamazon-redshift

解决方案


基本上,您将使用row_number(),order by并选择第 n 个值。因此,对于大约 1% 的分层样本,请执行以下操作:

select t.*
from (select t.*,
             row_number() over (order by category, rand()) as seqnum
      from t
     ) t
where mod(seqnum, 101) = 1
order by category;

基本思想是,您可以通过按类别对结果集进行排序并对结果进行第 n 个样本来获得分层样本。


推荐阅读