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
Freigeben: 2025-01-01 13:38:10
Original
620 Leute haben es durchsucht

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;
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage