gpt4 book ai didi

mysql - 从 MySQL 中选择随机行(有概率)

转载 作者:可可西里 更新时间:2023-11-01 06:45:25 27 4
gpt4 key购买 nike

我有一个 MySQL 表,其中有一个名为 cur_odds 的行,它是一个百分比数字,表示该行将被选中的概率百分比。例如,当您运行 100 个查询时,我如何进行查询以大约该频率实际选择行?

我尝试了以下操作,但是概率为 0.35 的行最终在大约 60-70% 的时间内被选中。

SELECT * FROM table ORDER BY RAND()*cur_odds DESC

表中所有cur_odds的值相加正好为1。

最佳答案

如果 cur_odds 很少改变,您可以实现以下算法:

1) 创建另一列 prob_sum,为此

prob_sum[0] := cur_odds[0]

for 1 <= i <= row_count - 1:

prob_sum[i] := prob_sum[i - 1] + cur_odds[i]

2)生成0到1的随机数:

rnd := rand(0,1)

3) 找到 prob_sum > rnd 的第一行(如果您在 prob_sum 上创建 BTREE 索引,查询应该运行得更快):

CREATE INDEX prob_sum_ind ON <table> (prob_sum);

SET @rnd := RAND();

SELECT MIN(prob_sum) FROM <table> WHERE prob_sum > @rnd;

关于mysql - 从 MySQL 中选择随机行(有概率),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2716163/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com