Mysql 基于概率概率选择随机值
如何根据分配给每一行的概率从数据库中随机选择一行。Mysql 基于概率概率选择随机值,mysql,sql,database,mysql-variables,Mysql,Sql,Database,Mysql Variables,如何根据分配给每一行的概率从数据库中随机选择一行。 例如: 我如何根据选择的概率选择随机生成名称及其值 rand()和orderby的组合会起作用吗?如果是这样的话,最好的方法是什么?您可以使用rand()然后使用累积和来实现这一点。假设它们加起来是100%: select t.* from (select t.*, (@cumep := @cumep + chance) as cumep from t cross join (select @cumep :=
例如: 我如何根据选择的概率选择随机生成名称及其值
rand()
和orderby
的组合会起作用吗?如果是这样的话,最好的方法是什么?您可以使用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()
- 随机数恰好位于两个值之间的边界上的可能性微乎其微。
任意选择1限制1
- 当
时,可以通过停止子查询来提高效率cumep>@r
- 这些值不必按任何特定顺序排列
- 这可以修改为处理总和不等于1的情况,但这将是另一个问题
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()
- 随机数恰好位于两个值之间的边界上的可能性微乎其微。
任意选择1限制1
- 当
时,可以通过停止子查询来提高效率cumep>@r
- 这些值不必按任何特定顺序排列
- 这可以修改为处理总和不等于1的情况,但这将是另一个问题
从表中选择SUM(CHANCE)
?也许您会发现这很有用:@lad2025是的,它的总和为1.0001检查表中有多少条记录是从中选择的?CHANCE总和是否为1从表中选择SUM(CHANCE)
?也许您会发现这很有用:@lad2025是的,它的总和为1.0001检查表中有多少条记录是从中选择的?