Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Ocena MySQL z wagą

Pierwszym krokiem jest obliczenie avg_num_votes i avg_rating :

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

Jeśli potrafisz żyć z małym błędem, wystarczy obliczyć to od czasu do czasu.

Teraz, używając swojej formuły i powyższych wartości, możesz uruchomić zapytanie ważenia. Jako małą optymalizację wstępnie obliczę avg_num_votes * avg_rating i nazwij go 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;

Edytuj

Możesz uruchomić to jako dołączenie:

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 to obliczy sumę i średnią dla każdego zapytania – nazwijmy to bombą wydajności.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd MySQL 2013

  2. MySql używający poprawnej składni dla klauzuli over

  3. Neo4j - Wybieranie danych za pomocą MATCH za pomocą Cypher

  4. Błąd MySQL 1093 - Nie można określić tabeli docelowej do aktualizacji w klauzuli FROM

  5. MySQLNonTransientConnectionException:Nie można utworzyć połączenia z serwerem bazy danych