相关疑难解决方法(0)

从mysql中的大表中快速选择随机行

从大型mysql表中选择随机行的快速方法是什么?

我在php工作,但我对任何解决方案感兴趣,即使它是用另一种语言.

mysql sql random select

45
推荐指数
4
解决办法
3万
查看次数

Ruby的sort_by {rand}是如何工作的?

我认为这是一个很棒的Ruby单行程序:

someArray.sort_by {rand}
Run Code Online (Sandbox Code Playgroud)

它简洁,可读,而且有效 - 但我不太明白.这就是我所知道的:

  1. rand 求值为0到1之间的数字(如0.783468632804653)
  2. rand正在上面的代码中重复评估,因为将其分配给x第一个会破坏随机排序
  3. sort_by {0.783468632804653},或我尝试的任何其他数字,对阵列没有影响

在这种情况下, ruby-doc.org对我没什么帮助.

有人可以一步一步地解释这个吗?

更新

我现在一直在使用Ruby,我发现我在这里错过了一两个概念.关键是:

  1. rand是一种方法(在内核上定义); 它会生成一个随机数
  2. {rand}是一个块,它sort_by保持,每次想要比较集合中的两个项目调用它.如果集合是一堆代表国家的对象,它需要能够抓取其中的两个并确定哪个是第一个.你先放一个名字最长的那个吗?土地面积最大的那个?该区块应该通过返回一个值"回答一个问题"来回答这个问题:"你问过西班牙对喀麦隆,我说喀麦隆是第一个." (你可以这样做{|country| country.name.length}

其余的sort_by工作原理在文档中进行了解释.我仍然不太确定为什么返回一个随机数可行 - 大概是将sort_by它舍入为-1,0或1,哪个最接近?但无论如何,每次调用块时获取不同的随机数与每次获取相同的数字完全不同.什么时候sort_by说"这两个国家中的哪一个先来?",{rand}戴上眼罩,转过10次,然后说"那个!" :)

ruby

21
推荐指数
2
解决办法
4948
查看次数

如何使用RAND(种子)在MySQL中对行进行采样?

我需要使用MySQL从表中获取可重复的随机行集.我使用MySQL RAND函数使用行的bigint主键作为种子实现了这一点.有趣的是,这产生的数字看起来并不随机.任何人都可以告诉我这里发生了什么以及如何让它正常工作?

select id from foo where rand(id) < 0.05 order by id desc limit 100
Run Code Online (Sandbox Code Playgroud)

在600行中的一个示例中,没有返回单个行.我将select更改为包含"id,rand(id)"并删除rand子句,这是我得到的:

| 163345 |  0.315191733944408 |
| 163343 |  0.814825518815616 |
| 163337 |  0.313726862253367 |
| 163334 |  0.563177533972242 |
| 163333 |  0.312994424545201 |
| 163329 |  0.312261986837035 |
| 163327 |  0.811895771708242 |
| 163322 |  0.560980224573035 |
| 163321 |  0.310797115145994 |
| 163319 |  0.810430896291911 |
| 163318 |  0.560247786864869 |
| 163317 |  0.310064677437828 |
Run Code Online (Sandbox Code Playgroud)

看看有多少0.31xxx行.一点也不随机.

PS:我知道这很慢但在我的应用中,where子句将行数限制为几千.

mysql random

3
推荐指数
1
解决办法
8234
查看次数

标签 统计

mysql ×2

random ×2

ruby ×1

select ×1

sql ×1