Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara memilih satu baris secara acak dengan mempertimbangkan bobot?

Saya pikir yang paling sederhana sebenarnya menggunakan sampling reservoir tertimbang:

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

Ini adalah metode hebat yang memungkinkan Anda memilih M dari N elemen di mana probabilitas untuk dipilih untuk setiap elemen sebanding dengan bobotnya. Ini bekerja dengan baik ketika Anda hanya menginginkan satu elemen. Metode ini dijelaskan dalam artikel ini . Perhatikan bahwa mereka memilih nilai terbesar dari POW(RAND(), 1/weight), yang setara dengan memilih nilai terkecil dari -LOG(RAND()) / weight.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jQuery UI Diurutkan, lalu tulis pesanan ke dalam database

  2. kesalahan sintaks MySQL ON DUPLICATE KEY UPDATE

  3. Codeigniter - beberapa koneksi database

  4. Permintaan MySQL untuk mendapatkan nama kolom?

  5. Gunakan konsol MySQL melalui skrip PowerShell