私は2つのテーブルがあります。企業の場合はbusinesses
とreviews
です。Mysqlベイジアンと星の評価で並べ替え
businesses
テーブル:
+----+-------+
| id | title |
+----+-------+
reviews
テーブル:
+----+-------------+---------+------+
| id | business_id | message | rate |
+----+-------------+---------+------+
各レビューはrate
(1〜5つ星)を持っている
私はBayesian Ranking
に基づいて、彼らのレビュー速度で事業をソートしたいです少なくとも2つのレビューを持っているという条件で。ここで
は私のクエリです:
SELECT b.id,
(SELECT COUNT(r.rate) as rr FROM reviews r WHERE r.business_id = b.id) as rr,
(SELECT
((COUNT(r.rate)/(COUNT(r.rate) + 2)) AVG(r.rate) +
(2 /(COUNT(r.rate) + 2)) 4)
FROM reviews r where r.business_id = b.id AND rr > 2
) as score
FROM businesses b
order by score desc
LIMIT 4
この意志出力私は:
+------+----+------------+
| id | rr | score |
+------+----+------------+
| 992 | 14 | 4.31250000 |
+------+----+------------+
| 237 | 3 | 4.2000000 |
+------+----+------------+
| 19 | 5 | 4.0000000 |
+------+----+------------+
| 1009 | 12 | 3.9285142 |
+------+----+------------+
私は2つの質問があります:あなたが((COUNT(r.rate)/(COUNT(r.rate) + 2)) AVG(r.rate) + (2 /(COUNT(r.rate) + 2)) 4) FROM reviews r where r.business_id = b.id AND rr > 2)
に見るように、いくつかの機能は、より多くのを実行している
を
COUNT
またはAVG
のように1回以上彼らはバックグラウンドで一度実行され、おそらくresusltをキャッシュしていますか? 1回の呼び出しごとに実行されますか?これに対応するクエリはありますが、さらに最適化されていますか?
ありがとうございます。
「正しい」回答が得られますか?私は 'rr'が2番目のサブクエリに見えてはならないと思う。 –