sql >> Database teknologi >  >> RDS >> PostgreSQL

Vælg tilfældig række fra en PostgreSQL-tabel med vægtede rækkesandsynligheder

Dette burde gøre tricket:

MED CTE AS ( SELECT random() * (SELECT SUM(procent) FRA DIN_TABEL) R)VÆLG *FRA ( SELECT id, SUM(procent) OVER (ORDER BY id) S, R FROM YOUR_TABLE CROSS JOIN CTE) QWHERE S>=RORDER BY idLIMIT 1;

Underforespørgslen Q giver følgende resultat:

1 502 853 100 

Vi genererer derefter blot et tilfældigt tal i området [0, 100) og vælger den første række, der er ved eller ud over dette tal (Hvor klausul). Vi bruger almindeligt tabeludtryk (WITH ) for at sikre, at det tilfældige tal kun beregnes én gang.

BTW, SELECT SUM(procent) FRA DIN_TABEL giver dig mulighed for at have alle vægte i procent - de behøver strengt taget ikke at være procenter (dvs. sammenlagt til 100).

[SQL violin]



  1. Hvor vigtig er rækkefølgen af ​​kolonner i indekser?

  2. Pil notation

  3. SQL DROP TABLE for begyndere

  4. Ingen dialektkortlægning for JDBC-type:2003