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.