Langkah pertama adalah menghitung avg_num_votes
dan avg_rating
:
SELECT
SUM(totalVotes)/COUNT(*) AS avg_num_votes,
SUM(avgVote)/COUNT(*) AS avg_rating
FROM voting;
Jika Anda dapat hidup dengan kesalahan kecil, mungkin cukup baik untuk menghitungnya sesekali.
Sekarang menggunakan rumus dan nilai di atas, Anda dapat menjalankan kueri penimbangan. Sebagai pengoptimalan kecil, saya menghitung sebelumnya avg_num_votes * avg_rating
dan beri nama 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;
Sunting
Anda dapat menjalankan ini sebagai gabungan:
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;
Namun ini akan menghitung jumlah dan rata-rata pada setiap kueri - sebut saja ini sebagai bom kinerja.