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

Thiên vị ngẫu nhiên trong SQL?

Bạn cần tạo một số ngẫu nhiên trên mỗi hàng và tính trọng số của nó.

Trong trường hợp này, RAND(CHECKSUM(NEWID())) xoay quanh đánh giá "mỗi truy vấn" của RAND . Sau đó, chỉ cần nhân nó với tăng và ĐẶT HÀNG BẰNG kết quả DESC. SUM..OVER mang lại cho bạn tổng mức tăng

DECLARE @sample TABLE (id int, boost int)

INSERT @sample VALUES (1, 1), (2, 2), (3, 7)

SELECT
    RAND(CHECKSUM(NEWID())) * boost  AS weighted,
    SUM(boost) OVER () AS boostcount,
    id
FROM
    @sample
GROUP BY
    id, boost
ORDER BY
    weighted DESC

Nếu bạn có các giá trị tăng cực kỳ khác nhau (mà tôi nghĩ bạn đã đề cập), tôi cũng sẽ xem xét sử dụng LOG (là cơ sở e) để phân phối suôn sẻ.

Cuối cùng, ORDER BY NEWID () là một sự ngẫu nhiên sẽ không tính đến việc tăng giá. Nó hữu ích để tạo RAND nhưng không phải tự nó.

Mẫu này được đặt cùng nhau trên SQL Server 2008, BTW



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi sql:Việc chuyển đổi kiểu dữ liệu varchar thành kiểu dữ liệu datetime dẫn đến giá trị nằm ngoài phạm vi

  2. Tham số biến / ràng buộc kết quả với các câu lệnh đã chuẩn bị

  3. Đầu vào của người dùng, làm sạch và vệ sinh trước khi gửi đến db

  4. Cách tốt nhất để xây dựng một công cụ tìm kiếm SMART mySQL &PHP?

  5. Cách chạy Truy vấn SQL thô với Zend Framework 2