sql >> Databáze >  >> RDS >> Mysql

Hodnocení MySQL s hmotností

Prvním krokem je výpočet avg_num_votes a avg_rating :

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

Pokud dokážete žít s malou chybou, může být dost dobré si to jednou za čas spočítat.

Nyní pomocí svého vzorce a výše uvedených hodnot můžete spustit dotaz na vážení. Jako malou optimalizaci předem vypočítám avg_num_votes * avg_rating a nazvěte jej 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;

Upravit

Můžete to spustit jako spojení:

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;

Ale toto vypočítá součet a průměr na každý jednotlivý dotaz – říkáme tomu výkonnostní bomba.




  1. Jak vytvořit tabulku v MySQL

  2. MySQL:Jak získat délku textu ve sloupci

  3. Jak funguje NULLIF() na serveru SQL Server

  4. SQL Server Performance File IO Statistics