SQL ORDER BY与自定义“比较器”一起使用?

时间:2013-04-14 19:28:52

标签: mysql sql sorting sql-order-by

为了获得表格内容的随机“排列”,选项是:
ORDER BY RAND()

我的问题是这在这方面是如何运作的?它将RAND()称为“比较器”? RAND不接受任何参数比较是不是很重要?

3 个答案:

答案 0 :(得分:2)

RAND()

  

返回0 <= v <0的范围内的随机浮点值v。 1.0。

您可以为其提供可选的seeding value

执行时,会将其视为virtual column random numbers。然后SQL engine使用此列来sort表内容,将其(动态列)视为任何普通列(具有浮点值)

答案 1 :(得分:2)

MySQL中的rand()函数每次调用时都会返回一个随机值。

当这个过程是排序例程读取记录,调用rand函数,并隐式地将具有随机值的列添加到记录时,会发生什么。此列在视图中隐藏 - 您永远不会看到它,但它用于排序。

逻辑上,这相当于:

select <columns in t>
from (select t.*, rand() as ordering
      from t
     ) t
order by ordering

答案 2 :(得分:0)

RAND()返回随机浮点数,因此使用标准浮点数比较来比较这些值。这就像您在表模式中有一个浮点数列,并在ORDER BY语句中使用它。这里没有魔力。