如何在Postgres中从非均匀分布的表中选择随机行?

时间:2014-09-22 10:22:44

标签: sql postgresql random distribution

这是我从具有均匀分布的表中选择随机行的方法。

SELECT * FROM foo OFFSET floor( random() * ( SELECT COUNT(*) FROM foo ) ) ORDER BY bar LIMIT 1;

让我们说我想选择一个非均匀分布的随机行,比如正态分布。

目前,我这样做的方式是:

SELECT * FROM foo OFFSET floor( $1 * ( SELECT COUNT(*) FROM foo ) ) ORDER BY bar LIMIT 1;

...并在执行前计算$1的值。

  • 有更好的方法吗?
  • 也许使用内置的postgres功能?
  • 也许不需要内部SELECT声明?

1 个答案:

答案 0 :(得分:0)

也许这entry from google books会有所帮助。

我相信您正在寻找统一/非均匀而不是线性/非线性,这可能会阻碍您的搜索。