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

Как да изберете един ред на случаен принцип, като се вземе предвид теглото?

Мисля, че най-простото всъщност е да се използва претегленото вземане на проби от резервоара:

SELECT
  id,
  -LOG(RAND()) / weight AS priority
FROM
  your_table
ORDER BY priority
LIMIT 1;

Това е страхотен метод, който ви позволява да изберете M от N елемента, където вероятността да бъде избран за всеки елемент е пропорционална на теглото му. Работи също толкова добре, когато случайно искате само един елемент. Методът е описан в тази статия . Обърнете внимание, че те избират най-големите стойности на POW(RAND(), 1/тегло), което е еквивалентно на избора на най-малките стойности на -LOG(RAND()) / тегло.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Свързване на android с MS SQL SERVER 2008

  2. Как да съхранявате данни, които съдържат кавички в MySQL

  3. Как да получите броя на засегнатите редове, докато изпълнявате MySQL заявка от bash?

  4. Актуализирайте ред, но вмъкнете, ако редът не съществува в codeigniter

  5. Индексът (на база нула) трябва да е по-голям или равен на нула