sql - 如何在 Redshift 中做分层随机样本?
问题描述
我需要随机抽取从不同类别购买的客户样本。有8个类别,订单分布在其中。
如果我想对已购买的客户进行随机抽样,但保持每个类别的订单比例相同,我将如何在我的 sql 代码中进行设置?
突出显示这一点的表格如下(它不包括客户数据 - 我希望我的客户列表基于订单的代表性比例):
我正在使用的表可以在这里找到:https ://imgur.com/a/Q0lMHWf
解决方案
基本上,您将使用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 个样本来获得分层样本。
推荐阅读
- elasticsearch - Elasticsearch 上的结果可疑的低
- excel - 对于列中的每个 xxx 未按预期工作
- opentok - OpenTok / ToxBox:将 API 密钥保密?
- html - Flexbox 容器的粘性位置
- php - 如何返回数组的文本值而不是函数结果?
- angular - 路由器出口刷新整个站点
- javascript - 从 Chrome 扩展,如何防止 Chrome 也自动从响应的 rel=preload 链接响应标头请求资源?
- .net - Viewstate 变量 - 一页到下一页
- gitlab-ci - gitlab-ci 在 ssh 命令中引用环境变量
- tsql - 为 CREATE TABLE 自动生成脚本,包括所有索引、约束等(不通过 SSMS)