具有加權機率的隨機行選擇
考慮一個包含 id、內容和權重等欄位的表格。您的目標是從該表中隨機選擇一行,同時考慮權重。
例如,給定包含以下資料的三行:
id, content, weight 1, "some content", 60 2, "other content", 40 3, "something", 100
機率分佈如下:
第2 行: 20%
第 3行:50%SELECT id, -LOG(RAND()) / weight AS priority FROM your_table ORDER BY priority LIMIT 1;
加權水庫採樣
實現此目的的最直接方法是透過加權水庫採樣:這個方法保證了M的合理選擇N 個元素的集合中的元素,其中選擇每個元素的機率與其權重成正比。即使只需要單一元素,它仍然有效。 所提供的文章中詳細描述了加權水庫採樣的基本原理。值得注意的是,它涉及選擇 -LOG(RAND()) / 權重的最小值,而不是文章中所述的 POW(RAND(), 1/權重) 的最大值。這會產生相同的結果。以上是如何使用SQL從加權表中隨機選擇一行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!