例如,如果我有一个名为companyId的列和我要保留的许多其他列,并且在companyId中我有100,101,102等的值,基本上是ID列表和每个Id显示不同的次数。如何根据companyId列随机抽样数据,以便根据每个Id的比例?
例如:如果我有500行和100公司,100公司和300公司C,我想从这个表中抽样100行。如何使我的数据有20家公司,20家公司和60家公司?
非常感谢。
您应该使用自TABLESAMPLE
中描述的PostgreSQL 9.5以来可用的SELECT
documentation子句。
有两种内置的表采样方法:SYSTEM
和BERNOULLI
。两者都试图获得随机样本,但SYSTEM
方法选择表格块并使用其中的数据,而BERNOULLI
使用整个表格中的随机样本。 SYSTEM
更快,但BERNOULLI
提供更均匀分布的样本。
您必须指定要获取的行的百分比。 如果你想要五分之一的表,你会使用:
SELECT * FROM mytable TABLESAMPLE BERNOULLI (20);
如果您的要求是获得一定数量的结果行,您可以考虑使用tsm_system_rows contrib模块,该模块提供与SYSTEM_ROWS
类似的SYSTEM
表示例方法,但您可以指定结果行的数量。