Dha*_*man 5 mysql sql database mysql-variables
如何根据分配给每一行的概率机会从数据库中选择一个随机行.
例:
Make Chance Value
ALFA ROMEO 0.0024 20000
AUDI 0.0338 35000
BMW 0.0376 40000
CHEVROLET 0.0087 15000
CITROEN 0.016 15000
........
Run Code Online (Sandbox Code Playgroud)
如何根据必须选择的概率选择随机生成名称及其值.
将组合rand()和ORDER BY工作?如果是这样,最好的方法是什么?
您可以通过使用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;
Run Code Online (Sandbox Code Playgroud)
笔记:
rand()在子查询中调用一次以初始化变量.多次呼叫rand()是不可取的.limit 1任意选择1.cumep > @r.