【发布时间】:2013-04-14 19:28:52
【问题描述】:
为了获得表格内容的随机“排列”,一个选项是:ORDER BY RAND()
我的问题是在这种情况下这是如何工作的?它调用RAND() 用作“比较器”? RAND 不带任何参数进行比较难道不重要吗?
【问题讨论】:
标签: mysql sql sorting sql-order-by
为了获得表格内容的随机“排列”,一个选项是:ORDER BY RAND()
我的问题是在这种情况下这是如何工作的?它调用RAND() 用作“比较器”? RAND 不带任何参数进行比较难道不重要吗?
【问题讨论】:
标签: mysql sql sorting sql-order-by
rand() 函数,在 MySQL 中,每次调用都会返回一个随机值。
在这个过程中发生的事情是排序例程读取记录,调用 rand 函数,并隐式地将具有随机值的列添加到记录中。此列是隐藏的——您永远看不到它,但它用于排序。
从逻辑上讲,这相当于:
select <columns in t>
from (select t.*, rand() as ordering
from t
) t
order by ordering
【讨论】:
ORDER BY 的文档在哪里?另一个示例函数是什么?
order by 中表达式的具体引用。这个解释是我对 order by 子句中表达式的 ANSI 标准的回忆。
ORDER BY 的“特征”?
order by 子句(或group by)中的表达式变成由表达式填充的“不可见”列。在 MySQL 中,rand() 为每一行返回不同的值,所以这是可行的。在其他数据库(例如 SQL Server)中,rand() 为整个查询返回一个值——您不会得到随机排列。 “功能”是rand() 函数的功能,而不是order by。
返回 0
你可以提供一个可选的seeding value
在执行时,这被视为virtual column 和random numbers。 SQL engine 然后使用此列来sort 表内容,将其(动态列)视为任何普通列(具有浮点值)
【讨论】:
ORDER BY 的文档在哪里?另一个示例函数是什么?
ORDER BY {col_name | expr | position}
RAND() 返回随机浮点数,因此使用标准浮点数比较来比较这些值。就像您在表模式中有一个浮点数列并在 ORDER BY 语句中使用它。这里没有魔法。
【讨论】: