首頁 > 資料庫 > mysql教程 > 如何使用 SQL 從表中以加權機率隨機選擇一行?

如何使用 SQL 從表中以加權機率隨機選擇一行?

Linda Hamilton
發布: 2024-12-26 06:55:15
原創
561 人瀏覽過

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

具有加權機率的隨機行選擇

考慮一個包含列id、內容和權重的表,任務是隨機選擇一行同時考慮到重量。在存在權重分別為60、40 和100 的三行的場景中,挑戰是計算選擇每一行的機率,如下所示:

  • 第1 行:30% 機會
  • 第2 行:20% 幾率
  • 第 3行:50%機會

加權水庫抽樣

這個問題的最佳方法是加權水庫抽樣,它可以有效地選擇機率與其權重成正比的項目。以下是如何應用它:

SELECT
  id,
  -LOG(RAND()) / weight AS priority
FROM
  your_table
ORDER BY priority
LIMIT 1;
登入後複製

此SQL 查詢採用以下邏輯:

  • 它將每行與其優先權配對,計算為隨機數除以的負對數按行的權重。
  • 按優先順序對行進行排序可確保權重較高的行有更大的機會出現在頂部
  • 將結果限制為單行會產生具有加權機率的隨機選擇的行。

這種加權水庫採樣技術可用於選擇多行甚至整個表格具有加權機率,使其成為各種資料選擇場景的通用解決方案。

以上是如何使用 SQL 從表中以加權機率隨機選擇一行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板