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

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

Linda Hamilton
Linda Hamilton原创
2024-12-23 06:34:47683浏览

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

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

考虑一个包含 id、内容和权重等字段的表。您的目标是从该表中随机选择一行,同时考虑权重。

例如,给定包含以下数据的三行:

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

概率分布如下:

  • 第 1 行:30%
  • 第 2 行: 20%
  • 第 3 行:50%

加权水库采样

实现此目的的最直接方法是通过加权水库采样:

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

这个方法保证了M的合理选择N 个元素的集合中的元素,其中选择每个元素的概率与其权重成正比。即使只需要单个元素,它仍然有效。

所提供的文章中详细描述了加权水库采样的基本原理。值得注意的是,它涉及选择 -LOG(RAND()) / 权重的最小值,而不是文章中所述的 POW(RAND(), 1/权重) 的最大值。这会产生相同的结果。

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

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