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

Làm thế nào để chọn ngẫu nhiên một hàng có tính đến trọng lượng?

Tôi nghĩ đơn giản nhất thực sự là sử dụng lấy mẫu hồ chứa có trọng số:

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

Đó là một phương pháp tuyệt vời cho phép bạn chọn M trong số N phần tử trong đó xác suất được chọn cho mỗi phần tử tỷ lệ với trọng lượng của nó. Nó hoạt động tốt khi bạn chỉ muốn một phần tử. Phương thức được mô tả trong bài viết này . Lưu ý rằng họ chọn các giá trị lớn nhất của POW (RAND (), 1 / weight), tương đương với việc chọn các giá trị nhỏ nhất của -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. Kết nối Google Cloud SQL với Wordpress trên Google Compute Engine

  2. Tắt đăng nhập gốc trong phpMyAdmin

  3. Tương đương với REF CURSOR của Oracle trong MySQL là gì?

  4. Cú pháp kích hoạt MySQL 'cập nhật trên cột'

  5. Bảo mật cơ sở dữ liệu - Mã hóa sao lưu trong quá trình vận chuyển &lúc nghỉ ngơi