mysql Rand()函数导致意外的多行结果

问题描述 投票:3回答:1

当我尝试使用RAND()函数从id获取随机行时,我得到意想不到的不稳定结果。以下查询(其中id列是主键)返回1,2或甚至更多行:

我尝试了下一个变体,它产生相同的结果:

SELECT id, word FROM words WHERE id = FLOOR(RAND() * 1000)

我找到了另一个解决方案:

SELECT id, word FROM words ORDER BY RAND() LIMIT 1

但我想知道为什么使用如此基本的功能,MySQL的行为是如此出乎意料。吓到我了。

我在不同的IDE中进行了实验,结果相同。

mysql sql random mysql-5.6
1个回答
3
投票

这种行为并不出乎意料。 RAND()函数按行计算:

SELECT RAND() FROM sometable LIMIT 10

+----------------------+
| RAND()               |
+----------------------+
|   0.7383128467372738 |
|   0.6141578719151746 |
|   0.8558508500976961 |
|   0.4367806654766022 |
|   0.6163508078235674 |
|   0.7714120734216757 |
|   0.0080079743713214 |
|   0.7258036823252251 |
|   0.6049945192458057 |
|   0.8475615799869984 |
+----------------------+

记住这一点,这个查询:

SELECT * FROM words WHERE id = FLOOR(RAND() * 1000)

意味着id在0到999之间的每一行都有1/1000被选中的概率!

© www.soinside.com 2019 - 2024. All rights reserved.