sql >> Database >  >> RDS >> Mysql

Hoe willekeurig een rij selecteren, rekening houdend met een gewicht?

Ik denk dat het eenvoudigst is om de gewogen reservoirbemonstering te gebruiken:

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

Het is een geweldige methode waarmee je M kunt kiezen uit N elementen waarbij de kans om voor elk element te worden gekozen evenredig is aan het gewicht ervan. Het werkt net zo goed als je maar één element wilt. De methode wordt beschreven in dit artikel . Merk op dat ze de grootste waarden van POW(RAND(), 1/weight) kiezen, wat overeenkomt met het kiezen van de kleinste waarden van -LOG(RAND()) / weight.



  1. Hoe een ingevoegde waarde voor trigger te krijgen

  2. Welke bedrijfstakken profiteren het meest van toegang?

  3. Kan een nummer worden gebruikt om een ​​MySQL-tabelkolom een ​​naam te geven?

  4. Een afbeelding ophalen die is opgeslagen als BLOB op een MYSQL DB