ホームページ > データベース > mysql チュートリアル > SQL を使用して加重確率を使用してテーブルから行をランダムに選択するにはどうすればよいですか?

SQL を使用して加重確率を使用してテーブルから行をランダムに選択するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-26 06:55:15
オリジナル
494 人が閲覧しました

How Can I Randomly Select a Row from a Table with Weighted Probability Using SQL?

重み付き確率によるランダムな行選択

列 ID、内容、および重みを持つテーブルを考えると、タスクは行をランダムに選択することです。重量を考慮しながら。重みがそれぞれ 60、40、100 の 3 つの行が存在するシナリオでは、各行が選択される確率を次のように計算することが課題となります:

  • 行 1: 30% の確率
  • 行 2: 20% の確率
  • 行 3: 50%チャンス

重み付きリザーバー サンプリング

この問題に対する最適なアプローチは、重み付きリザーバー サンプリングです。これにより、重みに比例した確率でアイテムを効果的に選択できます。これを適用する方法は次のとおりです:

SELECT
  id,
  -LOG(RAND()) / weight AS priority
FROM
  your_table
ORDER BY priority
LIMIT 1;
ログイン後にコピー

この SQL クエリは次のロジックを使用します:

  • 各行を、乱数で割った負の対数として計算された優先順位と組み合わせます。
  • 優先度によって行を並べ替えると、より高い重みを持つ行が表示される可能性が高くなります。結果セットの先頭。
  • 結果を 1 つの行に制限すると、重み付けされた確率でランダムに選択された行が得られます。

この重み付けされたリザーバー サンプリング手法を使用して、複数の行を選択できます。または、重み付けされた確率を使用してテーブル全体を表示することもできるため、さまざまなデータ選択シナリオに対応する多用途のソリューションとなります。

以上がSQL を使用して加重確率を使用してテーブルから行をランダムに選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート