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;
我不确定您对子查询 和 联接的意图。不过,以上内容是一个更好的起点。
我有一个视图不断返回此错误:
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;
我不确定您对子查询 和 联接的意图。不过,以上内容是一个更好的起点。