我正在尝试从具有指定过滤器的表中查询随机行。我正在使用TABLESAMPLE BERNOULLI(n)
来获取百分之n
的行。
我可以过滤结果,但是问题是,如果随机样本不包含所需数据(可能会在数据很少时发生),那么结果中将没有数据。
这是我正在运行的:
SELECT id from table TABLESAMPLE BERNOULLI(10) WHERE age < 20 LIMIT 30;
我希望能够先过滤表格,然后获取随机样本。我希望查询看起来像这样:
SELECT id from table WHERE age < 20 TABLESAMPLE BERNOULLI(10) LIMIT 30;
但这不是有效的语法。
我的问题是:过滤数据后是否可以使用TABLESAMPLE BERNOULLI?
答案 0 :(得分:0)
内森是对的。 postgres文档中的TABLESAMPLE Clause Restrictions部分指出:
TABLESAMPLE子句当前仅在常规表和实例化视图上接受。根据SQL标准,应该可以将其应用于任何FROM项目。
您可以这样编写查询:
create temp table tbl_filtered as select id from table where age < 20;
select id from tbl_filtered tablesample bernoulli(10) limit 30;