Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 基于概率概率选择随机值_Mysql_Sql_Database_Mysql Variables - Fatal编程技术网

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的情况,但这将是另一个问题

机会之和为1吗
从表中选择SUM(CHANCE)
?也许您会发现这很有用:@lad2025是的,它的总和为1.0001检查表中有多少条记录是从中选择的?CHANCE总和是否为1
从表中选择SUM(CHANCE)
?也许您会发现这很有用:@lad2025是的,它的总和为1.0001检查表中有多少条记录是从中选择的?