在postgres中是否有等效的oracle示例子句

时间:2016-05-17 13:42:38

标签: sql oracle postgresql

如果我想从oracle数据库中的表中获取“随机”行样本,我可以查询

select * from mytable sample(1)

并获得1%的回报

Postgres中是否有等效的命令?

1 个答案:

答案 0 :(得分:0)

如果是9.5或更高版本,您可以使用TABLESAMPLE

TABLESAMPLE sampling_method ( argument [, ...] ) [ REPEATABLE ( seed ) ]

根据文件:

  

table_name之后的TABLESAMPLE子句指示指定的   sampling_method应该用于检索行的子集   那张桌子。此抽样先于任何其他的应用   过滤器,如WHERE子句。标准的PostgreSQL发行版   包括两种采样方法,BERNOULLI和SYSTEM等   采样方法可以通过扩展安装在数据库中。

     

BERNOULLI和SYSTEM采样方法各自接受一个   参数,即要采样的表的分数,表示为a   0到100之间的百分比。该参数可以是任何实值   表达。 (其他抽样方法可能接受更多或不同   参数。)这两个方法都返回一个随机选择的样本   包含大约指定百分比的表   表的行。 BERNOULLI方法扫描整个表格   使用指定的内容独立选择或忽略各个行   可能性。 SYSTEM方法对每个进行块级采样   具有指定机会被选中的块;每个中的所有行   返回选定的块。 SYSTEM方法明显更快   当采样百分比较小时,比BERNOULLI方法   指定,但它可能会返回一个较不随机的表样本作为   聚类效果的结果。

     

可选的REPEATABLE子句指定种子编号或表达式   用于在采样方法中生成随机数。该   种子值可以是任何非null浮点值。两个查询   指定相同的种子和参数值将选择相同的样本   如果表没有同时更改的话。但   不同的种子值通常会产生不同的样本。如果   如果没有给出REPEATABLE,则为每个选择一个新的随机样本   查询。请注意,某些附加采样方法不接受   可重复,并且每次使用时都会产生新的样品。

链接:http://www.postgresql.org/docs/current/static/sql-select.html

介绍该功能的博客详情:http://blog.2ndquadrant.com/tablesample-in-postgresql-9-5-2/