首页 > 解决方案 > 您如何根据记录总数计算具有统计意义的样本量?(Postgres)

问题描述

假设我想获得去年从特定部门购买的客户的随机样本。

我想确保每个部门的随机样本在从该部门购买的客户总数中具有统计显着性(使用样本大小公式)(如果一个部门有 5000 万客户至少进行了 1 次购买) ,所需的样本量约为 390)。

我正在寻找看起来像这样的东西:我将使用ORDER BY random() LIMIT 结束我的 SQL 查询(此处为子查询以确定正确的样本大小

如何将样本大小公式实现到 LIMIT BY 语句从中提取的子查询中?

标签: sqlpostgresqlamazon-redshift

解决方案


您可以使用窗口函数:

select t.*
from (select t.*,
             row_number() over (partition by department order by rand()) as seqnum,
             count(*) over (partition by department) as cnt
      from t
     ) t
where seqnum < <your formula based on department size here>;

我现在不知道您的统计显着性公式是什么,但您可以使用cnt子查询中计算的部门大小 ( ) 将其插入。


推荐阅读