Heim >Datenbank >MySQL-Tutorial >Wie kann ich zufällig eine Zeile aus einer Tabelle mit gewichteten Wahrscheinlichkeiten auswählen?

Wie kann ich zufällig eine Zeile aus einer Tabelle mit gewichteten Wahrscheinlichkeiten auswählen?

Susan Sarandon
Susan SarandonOriginal
2025-01-01 13:38:10621Durchsuche

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

Zufällige Zeilenauswahl mit gewichteter Wahrscheinlichkeit

Problem:

Stellen Sie sich vor, Sie hätten eine Tabelle mit Spalten wie „id“, „Inhalt“ und „Gewicht“. Sie möchten unter Berücksichtigung des „Gewichtungswerts“ zufällig eine Zeile aus dieser Tabelle auswählen. Wenn zum Beispiel drei Zeilen vorhanden sind:

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

Die erste Zeile hat eine Auswahlwahrscheinlichkeit von 30 %, die zweite Zeile hat eine 20 %-Chance und die dritte Zeile hat eine 50 %-Chance.

Lösung:

Ein Ansatz besteht darin, ein gewichtetes Reservoir anzuwenden Stichprobenziehung:

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

Mit dieser Methode können Sie eines aus vielen Elementen auswählen, dessen Wahrscheinlichkeiten proportional zu ihren Gewichten sind. Es eignet sich effektiv für die Auswahl eines einzelnen Elements.

Die Technik wird in diesem Artikel näher erläutert: [Gewichtete Reservoirprobenahme](https://bit.ly/weighted-res-sampling). Beachten Sie, dass der Artikel die größten Werte von POW(RAND(), 1/Gewicht) auswählt, was der Auswahl der kleinsten Werte von -LOG(RAND())/Gewicht entspricht.

Das obige ist der detaillierte Inhalt vonWie kann ich zufällig eine Zeile aus einer Tabelle mit gewichteten Wahrscheinlichkeiten auswählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn