sql >> Databasteknik >  >> RDS >> Mysql

Hur väljer man en rad slumpmässigt med hänsyn till en vikt?

Jag tror att det enklaste faktiskt är att använda den viktade reservoarprovtagningen:

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

Det är en utmärkt metod som låter dig välja M av N element där sannolikheten att väljas för varje element är proportionell mot dess vikt. Det fungerar lika bra när du råkar bara ha ett element. Metoden beskrivs i denna artikel . Observera att de väljer de största värdena för POW(RAND(), 1/vikt), vilket motsvarar att välja de minsta värdena av -LOG(RAND()) / vikt.



  1. CakePHP 3 tidskolumn läggs till datum

  2. Praktiskt processorval för SQL Server 2014/2016 OLTP-arbetsbelastningar

  3. Oracle PL/SQL - Öka användardefinierat undantag med anpassad SQLERRM

  4. PDO-fel:Ogiltigt parameternummer:parametern har inte definierats