sql >> Databasteknik >  >> RDS >> Mysql

MySQL-betyg med vikt

Ett första steg är att beräkna avg_num_votes och avg_rating :

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

Om du kan leva med ett litet fel kan det vara bra att räkna ut det då och då.

Nu med din formel och värdena ovan kan du köra vägningsfrågan. Som en liten optimering förberäknar jag avg_num_votes * avg_rating och kalla det 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;

Redigera

Du kan köra detta som en join:

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;

Men detta kommer att beräkna summa och medelvärde för varje enskild fråga - kalla det en prestandabomb.




  1. Hur man jämför två tabeller i MySQL

  2. Inner Join laravel 5.2

  3. mysql count prestanda

  4. Har mysql motsvarigheten till Oracles analytiska funktioner?