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 (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]