sql >> Database teknologi >  >> RDS >> Mysql

Hvordan vælger man en række tilfældigt under hensyntagen til en vægt?

Jeg tror, ​​at det enkleste faktisk er at bruge den vægtede reservoirprøvetagning:

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

Det er en fantastisk metode, der lader dig vælge M ud af N elementer, hvor sandsynligheden for at blive valgt for hvert element er proportional med dets vægt. Det fungerer lige så godt, når du tilfældigvis kun vil have ét element. Metoden er beskrevet i denne artikel . Bemærk, at de vælger de største værdier af POW(RAND(), 1/vægt), hvilket svarer til at vælge de mindste værdier af -LOG(RAND()) / vægt.



  1. 12c Adaptive planer

  2. Hvordan genererer man automatisk identitet til en Oracle-database gennem Entity framework?

  3. Databasestyring og overvågning for PostgreSQL 12

  4. ORA-00001 unik begrænsning overtrådt