MySQL View 执行时返回多行错误

标签 mysql statistics average rating

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

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;

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

关于MySQL View 执行时返回多行错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31841204/

相关文章:

php - 如何更改默认主义实体方案?

php - 字符串无法转换为 JSONObject - Android

r - 在 R 中组合两个 Weibull 分布

sql - 空值会改变平均值吗?

php - 使用 PHP 从表中的列中选择名称

mysql - 无法启动 MySQL 安装程序

r - 检验分位数回归模型中的系数是否显着不同

python - 线性回归预测预测输入数据(测试数据),而不是测试结果

MySQL:显示平均值或空

java - 如何计算一个范围的平均值?