在PostgreSQL中,如何根据分类列中每个级别的比例从表中随机抽样?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在PostgreSQL中,如何根据分类列中每个级别的比例从表中随机抽样?相关的知识,希望对你有一定的参考价值。

例如,如果我有一个名为companyId的列和我要保留的许多其他列,并且在companyId中我有100,101,102等的值,基本上是ID列表和每个Id显示不同的次数。如何根据companyId列随机抽样数据,以便根据每个Id的比例?

例如:如果我有500行和100公司,100公司和300公司C,我想从这个表中抽样100行。如何使我的数据有20家公司,20家公司和60家公司?

非常感谢。

答案

您应该使用自TABLESAMPLE中描述的PostgreSQL 9.5以来可用的SELECT documentation子句。

有两种内置的表采样方法:SYSTEMBERNOULLI。两者都试图获得随机样本,但SYSTEM方法选择表格块并使用其中的数据,而BERNOULLI使用整个表格中的随机样本。 SYSTEM更快,但BERNOULLI提供更均匀分布的样本。

您必须指定要获取的行的百分比。 如果你想要五分之一的表,你会使用:

SELECT * FROM mytable TABLESAMPLE BERNOULLI (20);

如果您的要求是获得一定数量的结果行,您可以考虑使用tsm_system_rows contrib模块,该模块提供与SYSTEM_ROWS类似的SYSTEM表示例方法,但您可以指定结果行的数量。

以上是关于在PostgreSQL中,如何根据分类列中每个级别的比例从表中随机抽样?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据另一列中的特定日期和级别为列分配级别?

对PostgreSQL中数组类型列中的每个元素应用除法

根据月份日期列查找数据框列中每个因素的平均值[重复]

如何使用索引标签将 DataFrame 分组并执行操作以根据每个索引在特定列中找到 3 个最大的

如何在postgresql的列中针对单个记录选择多个值[重复]

根据每个句子的第一个单词将 pandas 数据框列中的字符串列表分解为新列