sql >> Database >  >> RDS >> Mysql

MySQL-beoordeling met gewicht

Een eerste stap is het berekenen van avg_num_votes en avg_rating :

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

Als je met een kleine fout kunt leven, is het misschien goed genoeg om dat af en toe te berekenen.

Met behulp van uw formule en de bovenstaande waarden kunt u de weegquery uitvoeren. Als kleine optimalisatie bereken ik vooraf avg_num_votes * avg_rating en noem het 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;

Bewerken

Je zou dit als een join kunnen uitvoeren:

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;

Maar dit berekent de som en het gemiddelde van elke afzonderlijke zoekopdracht - noem het een prestatiebom.




  1. Over het V-formaatelement in Oracle

  2. MySQL INSERT-gegevens worden niet opgeslagen in de juiste db, alleen tijdelijk?

  3. Cloud Disaster Recovery voor MariaDB en MySQL

  4. MySQL UDF sys_exec() werkt niet