【问题标题】:ORDER BY RANDOM - With or without replacement?随机订购 - 有无更换?
【发布时间】:2013-08-23 09:23:55
【问题描述】:

当使用SELECT * FROM Object ORDER BY RANDOM() LIMIT 200 之类的方法从表中随机抽取 200 个对象时,抽样是还是没有替换?我推测它是 with,但我不确定。我还没有找到任何关于此的文档。我正在使用 SQLite,但我认为那里的实现与其他实现没有什么不同。

【问题讨论】:

    标签: sql random


    【解决方案1】:

    首先为所有行分配一个随机值,然后选择最上面的 200 个,因此无需替换即可完成,因为同一行不可能被选择两次。

    【讨论】:

    • 你也可以给我一个来源吗?
    • 什么意思?一个实现这个的数据库引擎的例子?我可以提出一个简单的实验:创建一个表,添加 10 行(0..9),如果随机与替换一起使用,您可以构造任何具有限制的数字序列,但如果不是,您将始终获得最大值10 行,令人惊讶的是,没有重复的值(如果它是随机替换的概率非常低)。
    • 当然可以按照你说的试试看。但它也可以通过其他方式实现——我真的很想知道在任何一种 SQL 标准中是否有文档,或者至少在某些 DBMS 参考中是否有文档。我已经彻底搜索过,但没有找到。这就是为什么我要询问消息来源,因为你怎么能这么确定? ;-) 别误会,我也相信你的回答。
    • 我不能 100% 确定,但我真的不明白它如何以不同的方式实现并且对于 rdb 引擎仍然有意义。我能想到的任何其他可能的实现实际上都需要大量改变引擎内部的工作方式。而且我玩过一些随机数和数据库。但这是真的,我无法证明这就是它的工作方式,而不是在这个问题上停留的时间比我想的要长。对不起。
    猜你喜欢
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多