Heim > Datenbank > MySQL-Tutorial > Wie wähle ich zufällig eine Zeile aus einer SQL-Tabelle mit gewichteten Wahrscheinlichkeiten aus?

Wie wähle ich zufällig eine Zeile aus einer SQL-Tabelle mit gewichteten Wahrscheinlichkeiten aus?

Susan Sarandon
Freigeben: 2025-01-01 13:08:10
Original
411 Leute haben es durchsucht

How to Randomly Select a Row from a SQL Table with Weighted Probabilities?

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:

  • Berechnen eines Prioritätswerts für jede Zeile durch Division des Negativs Logarithmus einer Zufallszahl nach ihrem Gewicht.
  • Sortieren der Zeilen nach diesem Prioritätswert in aufsteigender Reihenfolge.
  • Auswählen der ersten Zeile in den sortierten Ergebnissen.

Diese Abfrage erreicht Folgendes:

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

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!

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