sql >> Databáze >  >> RDS >> Mysql

Jak vybrat jeden řádek náhodně s ohledem na váhu?

Myslím, že nejjednodušší je ve skutečnosti použít vážený odběr vzorků z nádrže:

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

Je to skvělá metoda, která vám umožňuje vybrat M z N prvků, přičemž pravděpodobnost výběru pro každý prvek je úměrná jeho váze. Funguje to stejně dobře, když chcete pouze jeden prvek. Metoda je popsána v tento článek . Všimněte si, že volí největší hodnoty POW(RAND(), 1/váha), což je ekvivalentní výběru nejmenších hodnot -LOG(RAND()) / hmotnost.



  1. Sloučení/kombinace více souborů PDF do jednoho PDF v Oracle pomocí balíčku PLPDF_TOOLKIT PL/SQL

  2. Jak vyčistit konzolu obrazovky mysql v systému Windows?

  3. Řadit podle data a času v sestupném pořadí?

  4. Jak změním výchozí schéma ve vývojáři sql?