Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL рейтинг с тегло

Първата стъпка е да изчислите avg_num_votes и avg_rating :

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

Ако можете да живеете с малка грешка, може да е достатъчно добре да я изчислявате от време на време.

Сега, като използвате вашата формула и стойностите по-горе, можете да изпълните заявката за претегляне. Като малка оптимизация предварително изчислявам avg_num_votes * avg_rating и го наречете 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;

Редактиране

Можете да стартирате това като присъединяване:

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;

Но това ще изчисли сумата и средната стойност за всяка отделна заявка - наречете го бомба за производителност.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Уникални IP адреси в система за гласуване

  2. как да сравним дата и час в php/mysql

  3. Разлика между две дати в MySQL

  4. Примери за DAYOFWEEK() – MySQL

  5. MySQL Най-добрите N резултати с Join Tables