我有一個如下所示的mySQL語句。它試圖選擇所有餐廳(每行1個),將每個餐廳的美食(每個餐廳可能有1個或更多的美食)連接到每個餐廳的列中,並且同樣對於平均評級和評級數量。MySQL:與GROUP_CONCAT,AVG和COUNT有關的問題
我已經設置了3個測試餐廳。餐廳1有2種美食類型和3種評分。問題在於,收視率的數量增加了實際價值的兩倍,而菜餚返回爲(菜餚1 3次,然後菜餚2 3次),例如(美食1,美食1,美食1,美食2,美食2,美食2)。你知道這可能是什麼原因嗎?謝謝你的幫助。
SELECT
r.*,
GROUP_CONCAT(c.cuisine SEPARATOR ', ') cuisine,
ROUND(AVG(re.avg_rating),1) rating,
COUNT(re.restaurant_id) num_ratings
FROM eat_eat_restaurants r
JOIN eat_eat_restaurant_cuisines_lookup rc ON (r.restaurant_id=rc.restaurant_id)
JOIN eat_eat_cuisines c ON (rc.cuisine_id=c.cuisine_id)
LEFT JOIN eat_eat_reviews re ON (r.restaurant_id=re.restaurant_id)
WHERE r.published=1
GROUP BY r.restaurant_id
那將是多場比賽中的一個表造成重複,記住連接生成一個交叉產品。無論是你還是你的GROUP BY都需要更多的內容。嘗試將'r。*'更改爲'r.restaurant_id'並查看問題是否消失。 – Orbling