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

pilih nilai acak berdasarkan peluang probabilitas

Anda dapat melakukan ini dengan menggunakan rand() dan kemudian menggunakan jumlah kumulatif. Dengan asumsi mereka menambahkan hingga 100%:

select t.*
from (select t.*, (@cumep := @cumep + chance) as cumep
      from t cross join
           (select @cumep := 0, @r := rand()) params
     ) t
where @r between cumep - chance and cumep
limit 1;

Catatan:

  • rand() dipanggil sekali dalam subquery untuk menginisialisasi variabel. Beberapa panggilan ke rand() tidak diinginkan.
  • Ada kemungkinan kecil bahwa bilangan acak akan tepat berada pada batas antara dua nilai. limit 1 sewenang-wenang memilih 1.
  • Ini dapat dibuat lebih efisien dengan menghentikan subquery ketika cumep > @r .
  • Nilai tidak harus dalam urutan tertentu.
  • Ini dapat dimodifikasi untuk menangani peluang di mana jumlahnya tidak sama dengan 1, tetapi itu akan menjadi pertanyaan lain.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menambahkan beberapa kolom SETELAH kolom tertentu di MySQL

  2. Memantau Percona XtraDB Cluster - Metrik Utama

  3. Bagaimana cara mengelompokkan berdasarkan minggu di MySQL?

  4. Cara mengatur variabel lingkungan untuk Laravel 5 di AWS EC2 dengan MySQL

  5. Kerangka Entitas C#:Kata kunci tidak didukung:'port'