【发布时间】:2011-12-06 17:10:27
【问题描述】:
我找到了这个从 Oracle 表中选择随机行的解决方案。实际上是以随机方式对行进行排序,但您只能获取第一行以获得随机结果。
SELECT *
FROM table
ORDER BY dbms_random.value;
我只是不明白它是如何工作的。在 ORDER BY 之后,它应该是用于排序的列。我看到“dbms_random.value”返回一个小于零的值。这种行为可以解释还是只是这样?
谢谢
【问题讨论】:
我找到了这个从 Oracle 表中选择随机行的解决方案。实际上是以随机方式对行进行排序,但您只能获取第一行以获得随机结果。
SELECT *
FROM table
ORDER BY dbms_random.value;
我只是不明白它是如何工作的。在 ORDER BY 之后,它应该是用于排序的列。我看到“dbms_random.value”返回一个小于零的值。这种行为可以解释还是只是这样?
谢谢
【问题讨论】:
你也可以这样想:
SELECT col1, col2, dbms_random.value
FROM table
ORDER BY 3
在本例中,数字 3 = 第三列
【讨论】:
当你按dbms_random.value排序时,Oracle按表达式排序,而不是按列排序。Oracle对每条记录计算一个随机数,然后按这个数排序。
以类似的方式,是这样的:
select * from emp order by upper(ename);
你有一个基于函数的 order by。
【讨论】: