我有一个 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/