ホームページ > データベース > mysql チュートリアル > 加重確率を使用して SQL テーブルから行をランダムに選択する方法

加重確率を使用して SQL テーブルから行をランダムに選択する方法

Susan Sarandon
リリース: 2025-01-01 13:08:10
オリジナル
411 人が閲覧しました

How to Randomly Select a Row from a SQL Table with Weighted Probabilities?

重み付けを考慮したランダムな行選択

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 サイトの他の関連記事を参照してください。

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