按随机含义排序(postgresql)

Att*_*lio 4 postgresql random select

在 PostgreSQL 中选择随机行的一种可能方法是:

\n\n

select * from table order by random() limit 1000;

\n\n

(另请参阅此处。)

\n\n

我的问题是,order by random()到底是什么意思?是否以某种方式生成了一个随机数并将其视为某种“种子”?或者这是特殊的内置语法,在这个地方random()具有与其他上下文不同的含义?

\n\n

从一些实验来看,最后一种解释似乎更合理。考虑以下:

\n\n
# select random();\n      random       \n\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\n 0.336829286068678\n(1 row)\n
Run Code Online (Sandbox Code Playgroud)\n\n
# select * from article order by 0.336829286068678 limit 5;\nERROR:  non-integer constant in ORDER BY\nLINE 1: select * from article order by 0.336829286068678 limit 5;\n
Run Code Online (Sandbox Code Playgroud)\n

jja*_*nes 6

ORDERY BY random()并非特例。它生成随机数,每一行一个,然后按它们排序。因此,它会导致行以随机顺序呈现。

相反,这是ORDER BY <literal constant>特殊情况,但该特殊情况仅适用于整数。它会抛出您为非整数显示的错误。特殊情况是它使用整数索引选择列表,并按选择列表中的该列进行排序。这使您可以选择表达式并按表达式排序,而不必在两个位置重复该表达式。