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

问题描述 投票:1回答:1

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

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

非常感谢。

sql postgresql random
1个回答
1
投票

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

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

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

SELECT * FROM mytable TABLESAMPLE BERNOULLI (20);

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

© www.soinside.com 2019 - 2024. All rights reserved.