加权考虑的随机行选择
SQL 提供了一种从表中随机选择行的方法。然而,考虑每行的权重来影响选择概率并不简单。
实现这一点的一种方法是加权水库采样,这是一种优雅而有效的技术,用于从带有替换的集合中选择元素概率与其权重成正比。
在 SQL 中实现这一点涉及:
此查询完成此操作:
SELECT id, -LOG(RAND()) / weight AS priority FROM your_table ORDER BY priority LIMIT 1;
在此查询中,LOG(RAND())生成 0 到 1 之间均匀分布的随机数。对该数取负对数可有效反转其值,从而导致较小的随机值产生较大的数字。通过将此反转值除以行的权重,我们获得权重较高的行的较小优先级。
因此,权重较高的行将具有较低的优先级分数,并且更有可能位于顶部排序结果,从而增加被选择的机会。这种方法确保每行的选择概率与其权重成正比。
以上是如何使用加权概率从 SQL 表中随机选择一行?的详细内容。更多信息请关注PHP中文网其他相关文章!