Ik denk dat het eenvoudigst is om de gewogen reservoirbemonstering te gebruiken:
SELECT
id,
-LOG(RAND()) / weight AS priority
FROM
your_table
ORDER BY priority
LIMIT 1;
Het is een geweldige methode waarmee je M kunt kiezen uit N elementen waarbij de kans om voor elk element te worden gekozen evenredig is aan het gewicht ervan. Het werkt net zo goed als je maar één element wilt. De methode wordt beschreven in dit artikel . Merk op dat ze de grootste waarden van POW(RAND(), 1/weight) kiezen, wat overeenkomt met het kiezen van de kleinste waarden van -LOG(RAND()) / weight.