如何根据分配给每一行的概率机会从数据库中选择一个随机行 示例:的
Make Chance Value
ALFA ROMEO 0.0024 20000
AUDI 0.0338 35000
BMW 0.0376 40000
CHEVROLET 0.0087 15000
CITROEN 0.016 15000
........
如何根据必须选择的概率选择随机make name及其值。
rand()
和ORDER BY
的组合是否有效?如果是这样,最好的方法是什么?
答案 0 :(得分:7)
您可以使用rand()
然后使用累计总和来完成此操作。假设他们加起来是100%:
select t.*
from (select t.*, (@cumep := @cumep + chance) as cumep
from t cross join
(select @cumep := 0, @r := rand()) params
) t
where @r between cumep - chance and cumep
limit 1;
注意:
rand()
一次以初始化变量。多次调用rand()
是不可取的。limit 1
任意选择1。cumep > @r
。