Mysql
 sql >> база данни >  >> RDS >> Mysql

изберете произволна стойност въз основа на вероятността

Можете да направите това с помощта на 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 .
  • Стойностите не трябва да са в определен ред.
  • Това може да бъде променено, за да се обработват шансове, при които сумата не е равна на 1, но това би било друг въпрос.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съединете две таблици и ги филтрирайте с клауза where

  2. SQL - Как да транспонирам?

  3. Как да инсталирате MySQL 8 с Workbench на Windows 10

  4. Импортиране на голям CSV в mysql база данни

  5. Нулиране на Root парола на MySQL