如何在过滤查询中使用TABLESAMPLE?

时间:2019-07-09 19:31:34

标签: sql postgresql

我正在尝试从具有指定过滤器的表中查询随机行。我正在使用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?

1 个答案:

答案 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;