sql >> Base de Datos >  >> RDS >> Mysql

Calificación de MySQL con peso

Un primer paso es calcular avg_num_votes y avg_rating :

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

Si puede vivir con un pequeño error, podría ser lo suficientemente bueno como para calcularlo de vez en cuando.

Ahora, utilizando su fórmula y los valores anteriores, puede ejecutar la consulta de pesaje. Como una pequeña optimización, precalculo avg_num_votes * avg_rating y llámalo 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;

Editar

Podrías ejecutar esto como una unión:

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;

Pero esto calculará la suma y el promedio de cada consulta individual; llámelo una bomba de rendimiento.