पहला कदम avg_num_votes
. की गणना करना है और avg_rating
:
SELECT
SUM(totalVotes)/COUNT(*) AS avg_num_votes,
SUM(avgVote)/COUNT(*) AS avg_rating
FROM voting;
यदि आप एक छोटी सी त्रुटि के साथ जी सकते हैं, तो यह गणना करने के लिए पर्याप्त हो सकता है कि कभी-कभार।
अब अपने सूत्र और उपरोक्त मानों का उपयोग करके, आप वेटिंग क्वेरी चला सकते हैं। एक छोटे से अनुकूलन के रूप में मैं avg_num_votes * avg_rating
की पूर्व-गणना करता हूं और इसे 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;
संपादित करें
आप इसे एक जॉइन के रूप में चला सकते हैं:
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;
लेकिन यह प्रत्येक क्वेरी पर योग और औसत की गणना करेगा - इसे एक प्रदर्शन बम कहें।