重み付けを考慮したランダムな行選択
SQL は、テーブルから行をランダムに選択する手段を提供します。ただし、各行の重みを考慮して選択確率に影響を与えることは簡単ではありません。
これを達成する 1 つの方法は、重み付きリザーバー サンプリングです。これは、置換を使用してセットから要素を選択するための洗練された効果的な手法です。
これを SQL で実装するには、以下が含まれます:
このクエリは次のことを実現します。
SELECT id, -LOG(RAND()) / weight AS priority FROM your_table ORDER BY priority LIMIT 1;
このクエリでは、 LOG(RAND()) は、0 から 1 までの一様に分布した乱数を生成します。この数値の負の対数を取ると、その値が効果的に反転され、乱数値が小さいほど数値が大きくなります。この反転した値を行の重みで割ることにより、重みが高い行ほど優先度が低くなります。
その結果、重みが高い行の優先度スコアは低くなり、最上位に表示される可能性が高くなります。ソートされた結果が選ばれる可能性が高まります。このアプローチにより、各行の選択確率がその重みに比例することが保証されます。
以上が加重確率を使用して SQL テーブルから行をランダムに選択する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。