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

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

Susan Sarandon
Susan Sarandon原創
2025-01-01 13:38:10604瀏覽

How Can I Randomly Select a Row from a Table with Weighted Probabilities?

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

問題:

想像有一個包含「id」等列的表, “內容”和“重量”。您想要從該表中隨機選擇一行,考慮「權重」值。例如,如果有三行:

id content weight
1 some content 60
2 other content 40
3 something 100

第一行有 30% 的機會被選擇,第二行有 20% 的機會,第三行有 50% 的機會。

解決方案:

一種方法是應用加權水庫採樣:

SELECT
  id,
  -LOG(RAND()) / weight AS priority
FROM
  your_table
ORDER BY priority
LIMIT 1;

此方法允許您從眾多元素中選擇一個,其機率與其權重成正比。它可以有效地選擇單一元素。

本文詳細介紹了此技術:[加權儲層取樣](https://bit.ly/weighted-res-sampling)。注意,文章選擇了 POW(RAND(), 1/weight) 的最大值,相當於選擇了 -LOG(RAND()) / Weight 的最小值。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn