gpt4 book ai didi

MySQL:GROUP_CONCAT、AVG 和 COUNT 的问题

转载 作者:行者123 更新时间:2023-11-29 00:58:29 24 4
gpt4 key购买 nike

我有一个 mySQL 语句,如下所示。它尝试选择所有餐厅(每行 1 个),将每个餐厅的美食(因为每个餐厅可能有 1 个或多个美食)连接到每个餐厅的一列中,平均评分和评分数量也是如此。

我设置了 3 家测试餐厅。餐厅 1 有 2 种美食类型和 3 个等级。问题是评分的数量返回实际值的两倍,而美食返回为(cuisine1 3 次然后 cuisine2 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 对结果进行分组,而不是单独对表进行分组。

在你的情况下你想要

  1. 餐厅信息。
  2. 美食。
  3. 收视率。

由于“菜系”和“评分”之间没有相互依赖关系,所以需要将其中一个单独分组:

SELECT
r.*,
GROUP_CONCAT(c.cuisine SEPARATOR ', ') cuisine,
reg.rating,
reg.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 (
SELECT re.restaurant_id,
ROUND(AVG(re.avg_rating),1) rating,
COUNT(re.restaurant_id) num_ratings
FROM eat_eat_reviews re
GROUP BY re.restaurant_id
) reg ON r.restaurant_id=reg.restaurant_id
WHERE r.published=1
GROUP BY r.restaurant_id

关于MySQL:GROUP_CONCAT、AVG 和 COUNT 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4910738/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com