Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Bewertung mit Gewicht

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.