加權考慮的隨機行選擇
SQL 提供了一種從表中隨機選擇行的方法。然而,考慮每行的權重來影響選擇機率並不簡單。
實現這一點的一種方法是加權水庫採樣,這是一種優雅而有效的技術,用於從帶有替換的集合中選擇元素概率與其權重成正比。
在 SQL 中實現這一點涉及:
此查詢完成此操作:
SELECT id, -LOG(RAND()) / weight AS priority FROM your_table ORDER BY priority LIMIT 1;
在此查詢中,LOG(RAND())產生 0 到 1 之間均勻分佈的隨機數。對該數取負對數可有效反轉其值,導致較小的隨機值產生較大的數字。將此反轉值除以行的權重,我們獲得權重較高的行的較小優先權。
因此,權重較高的行將具有較低的優先級分數,並且更有可能位於頂部排序結果,從而增加被選擇的機會。這種方法確保每行的選擇機率與其權重成正比。
以上是如何使用加權機率從 SQL 表中隨機選擇一行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!