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. Node.jsでのPostgreSQLの複数行の更新

    2. とにかくメジャーバージョンとは何ですか?

    3. ホスト「xxx.xx.xxx.xxx」はこのMySQLサーバーへの接続を許可されていません

    4. さまざまなアイテムをバケットにグループ化するSQLクエリ