mySQL随机选择概率

Win*_*ute 6 mysql sql

假设我有一个带有整数字段的数据库表 - 称之为"flavor",该字段的值只能是数字1到10.

有没有办法从数据库中选择一个随机行,20%的可能性是6号味道,30%的可能性是2号味道,50%的可能性是味道1?


对迟到的回应表示歉意 - 非常感谢您的帮助.欧根的答案似乎最能涵盖我所需要的; 我知道ORDER BY rand()的危险,但我正在编写的应用程序不能在大型数据源上运行,或者必须支持许多并发用户.所以我会接受它并接受性能打击.

Eug*_*eck 6

SELECT
  IF(@rnd<0.5,1,IF(@rnd<0.8,2,6)) AS rndflavour
FROM
  (SELECT @rnd:=rand()) AS rndinit;
Run Code Online (Sandbox Code Playgroud)

提供所需概率的风味。

SELECT * FROM tablename ORDER BY rand() LIMIT 1
Run Code Online (Sandbox Code Playgroud)

给您一个随机行。现在,我们将其放在一起:

SELECT
  tablename.*
FROM
  tablename
  INNER JOIN (
    SELECT
      IF(@rnd<0.5,1,IF(@rnd<0.8,2,6)) AS rndflavour
    FROM
      (SELECT @rnd:=rand()) AS rndinit
  ) AS rndview ON rndview.rndflavour=tablename.flavour
ORDER BY rand()
LIMIT 1
Run Code Online (Sandbox Code Playgroud)

  • 如果表很大,强烈建议不要使用ORDER BY rand()-这将导致性能很差。 (2认同)