首页 >数据库 >mysql教程 >如何使用加权概率从表中随机选择一行?

如何使用加权概率从表中随机选择一行?

Susan Sarandon
Susan Sarandon原创
2025-01-01 13:38:10603浏览

How Can I Randomly Select a Row from a Table with Weighted Probabilities?

具有加权概率的随机行选择

问题:

想象有一个包含“id”等列的表, “内容”和“重量”。您想要从该表中随机选择一行,考虑“权重”值。例如,如果存在三行:

id content weight
1 some content 60
2 other content 40
3 something 100

第一行有 30% 的机会被选择,第二行有 20% 的机会,第三行有 50% 的机会。

解决方案:

一种方法是应用加权水库采样:

SELECT
  id,
  -LOG(RAND()) / weight AS priority
FROM
  your_table
ORDER BY priority
LIMIT 1;

此方法允许您从众多元素中选择一个,其概率与其权重成正比。它可以有效地选择单个元素。

本文详细介绍了该技术:[加权储层采样](https://bit.ly/weighted-res-sampling)。注意,文章选择了 POW(RAND(), 1/weight) 的最大值,相当于选择了 -LOG(RAND()) / Weight 的最小值。

以上是如何使用加权概率从表中随机选择一行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn