我有一个不断返回此错误的视图:
子查询返回多行
我对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
我想要的只是使用贝叶斯公式从数据库中检索评级,我在过去几个小时里一直在谷歌搜索,而且我没有赢。
提前谢谢
答案 0 :(得分:2)
这是一个棘手的错误,由查询中的细微问题引起。考虑:
(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;
我不完全确定您对子查询和连接的意图。不过,上面是一个更好的起点。