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

Xếp hạng MySQL với Trọng lượng

Bước đầu tiên là tính toán avg_num_votesavg_rating :

SELECT
  SUM(totalVotes)/COUNT(*) AS avg_num_votes,
  SUM(avgVote)/COUNT(*) AS avg_rating
FROM voting;

Nếu bạn có thể sống với một sai sót nhỏ, có thể đủ tốt để tính toán điều đó một lần.

Bây giờ sử dụng công thức của bạn và các giá trị ở trên, bạn có thể chạy truy vấn cân. Như một cách tối ưu hóa nhỏ, tôi tính toán trước avg_num_votes * avg_rating và gọi nó là avg_summand

SELECT
  voting.*, -- or whatever fields you need
  ($avg_summand+totalVotes*avgVote)/($avg_num_votes+totalVotes) AS bayesian
FROM voting
ORDER BY  bayesian DESC
LIMIT 1;

Chỉnh sửa

Bạn có thể chạy điều này với tư cách tham gia:

SELECT
  voting.*, -- or whatever fields you need
  (avg_num_votes*avg_rating+totalVotes*avgVote)/(avg_num_votes+totalVotes) AS bayesian
FROM voting,
(
  SELECT
    SUM(totalVotes)/COUNT(*) AS avg_num_votes,
    SUM(avgVote)/COUNT(*) AS avg_rating
  FROM voting AS iv
) AS avg
ORDER BY  bayesian DESC
LIMIT 1;

Nhưng điều này sẽ tính toán tổng và trung bình trên mỗi truy vấn - gọi nó là một quả bom hiệu suất.




  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àm cách nào để hủy tất cả các quy trình trong danh sách quy trình hiển thị Mysql?

  2. LỖI 1356 (HY000):Xem các tham chiếu của 'mysql.user' không hợp lệ (các) bảng hoặc (các) cột hoặc (các) hàm hoặc bộ định nghĩa / người gọi của chế độ xem thiếu quyền sử dụng chúng

  3. CẬP NHẬT SQL với truy vấn phụ tham chiếu đến cùng một bảng trong MySQL

  4. Ví dụ về WEEKDAY () - MySQL

  5. Hive 2.1.1 MetaException (thông báo:Không tìm thấy thông tin phiên bản trong hệ thống di căn.)