Zufällige Zeilenauswahl mit gewichteter Berücksichtigung
SQL bietet eine Möglichkeit, eine Zeile zufällig aus einer Tabelle auszuwählen. Die Berücksichtigung einer Gewichtung für jede Zeile zur Beeinflussung der Auswahlwahrscheinlichkeit ist jedoch nicht einfach.
Eine Methode, dies zu erreichen, ist die gewichtete Reservoirstichprobe, eine elegante und effektive Technik zur Auswahl von Elementen aus einer Menge mit Ersetzung und mit Wahrscheinlichkeiten, die proportional zu ihren Gewichten sind.
Die Implementierung in SQL umfasst:
Diese Abfrage erreicht Folgendes:
SELECT id, -LOG(RAND()) / weight AS priority FROM your_table ORDER BY priority LIMIT 1;
In dieser Abfrage generiert LOG(RAND()) eine gleichmäßig verteilte Zufallszahl zwischen 0 und 1. Durch den negativen Logarithmus dieser Zahl wird ihr Wert effektiv invertiert, was zu einer größeren Zahl für kleinere Zufallswerte führt. Indem wir diesen invertierten Wert durch die Gewichtung der Zeile dividieren, erhalten wir eine kleinere Priorität für Zeilen mit höherer Gewichtung.
Daher haben Zeilen mit höherer Gewichtung eine niedrigere Prioritätsbewertung und sind mit größerer Wahrscheinlichkeit an der Spitze der sortierten Ergebnisse und erhöhen so ihre Auswahlchancen. Dieser Ansatz stellt sicher, dass die Auswahlwahrscheinlichkeit jeder Zeile proportional zu ihrer Gewichtung ist.
Das obige ist der detaillierte Inhalt vonWie wähle ich zufällig eine Zeile aus einer SQL-Tabelle mit gewichteten Wahrscheinlichkeiten aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!