MySQL查看returns多行执行时出错

MySQL view returns more than one row error when executed

我有一个视图不断返回此错误:

subquery returns more than one row

我不擅长 sql,我正在寻找外行人解释为什么会发生这种情况以及如何解决它。我的代码如下:

Create View `RestaurantRatings` AS    
    SELECT
        p.restaurantName,
    (SELECT count(r.restaurantID) FROM RestaurantReviews) / (SELECT count(DISTINCT r.restaurantID) FROM RestaurantReviews) AS avg_num_votes,
    (SELECT avg(r.rating) FROM RestaurantReviews) AS avg_rating,
    count(r.restaurantID) as num_votes,
    avg(r.rating) as rating
FROM
    Restaurants p,
    RestaurantReviews r
where
     p.restaurantID = r.restaurantID
GROUP BY 
    restaurantName

我只想使用贝叶斯公式从数据库中检索评分,过去几个小时我一直在谷歌搜索,但我没有获胜。

提前致谢

这是一个棘手的错误,由您的查询中的一个细微问题引起。考虑:

(SELECT count(r.restaurantID) FROM RestaurantReviews) 

你以为这是在做聚合。然而,它不是,因为 r.restaurantId 来自外部查询,所以即使 count() 来自外部查询。您可以通过删除或调整子查询中的别名来解决这个问题。

相反,只需使用适当的连接编写适当的聚合查询。查询将是这样的:

Create View `RestaurantRatings` AS    
    SELECT p.restaurantName,
           count(r.restaurantID) / count(DISTINCT r.restaurantID) AS avg_num_votes,
           avg(r.rating) AS avg_rating,
           count(r.restaurantID) as num_votes,
    FROM Restaurants p left join
         RestaurantReviews r
         on p.restaurantID = r.restaurantID
    GROUP BY  restaurantName;

我不确定您对子查询 联接的意图。不过,以上内容是一个更好的起点。