Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

chọn giá trị ngẫu nhiên dựa trên cơ hội xác suất

Bạn có thể thực hiện việc này bằng cách sử dụng rand() và sau đó sử dụng tổng tích lũy. Giả sử chúng cộng lại đến 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;

Ghi chú:

  • rand() được gọi một lần trong một truy vấn con để khởi tạo một biến. Nhiều cuộc gọi đến rand() không mong muốn.
  • Có một cơ hội từ xa là số ngẫu nhiên sẽ nằm chính xác trên ranh giới giữa hai giá trị. limit 1 tùy ý chọn 1.
  • Điều này có thể được thực hiện hiệu quả hơn bằng cách dừng truy vấn con khi cumep > @r .
  • Các giá trị không nhất thiết phải theo bất kỳ thứ tự cụ thể nào.
  • Điều này có thể được sửa đổi để xử lý các trường hợp tổng không bằng 1, nhưng đó sẽ là một câu hỏi khác.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:Số lượng bản ghi với các tháng liên tiếp

  2. Laravel Eloquent so với trình tạo truy vấn - Tại sao sử dụng eloquent để giảm hiệu suất

  3. Cách kiểm tra xem mysqli_query có xóa bất kỳ hàng nào không

  4. Lỗi nghiêm trọng:Không thể sử dụng đối tượng kiểu stdClass làm mảng trong

  5. Giúp đăng nhập an toàn hơn