最も簡単なのは、実際には加重リザーバーサンプリングを使用することだと思います:
SELECT
id,
-LOG(RAND()) / weight AS priority
FROM
your_table
ORDER BY priority
LIMIT 1;
これは、各要素に対して選択される確率がその重みに比例するN個の要素からM個を選択できる優れた方法です。要素が1つだけ必要な場合にも同様に機能します。この方法については、この記事 。 POW(RAND()、1 / weight)の最大値を選択することに注意してください。これは、-LOG(RAND())/weightの最小値を選択するのと同じです。