Ein erster Schritt ist die Berechnung von avg_num_votes
und avg_rating
:
SELECT
SUM(totalVotes)/COUNT(*) AS avg_num_votes,
SUM(avgVote)/COUNT(*) AS avg_rating
FROM voting;
Wenn Sie mit einem kleinen Fehler leben können, reicht es vielleicht aus, diesen ab und zu zu berechnen.
Jetzt können Sie mit Ihrer Formel und den obigen Werten die Wiegeabfrage ausführen. Als kleine Optimierung rechne ich avg_num_votes * avg_rating
vor und nennen Sie es 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;
Bearbeiten
Sie könnten dies als Join ausführen:
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;
Aber dies berechnet die Summe und den Durchschnitt für jede einzelne Abfrage - nennen Sie es eine Leistungsbombe.