我是新的sql查询和我有麻烦的以下问题。我们有一张书评表( review_id, book_id,...
)还有一张table review_good_bad
( review_id, IsGood
)这就说明了评审的好坏。 Review_id
在table上 review_good_bad
是外键 IsGood
是布尔值。我得找出多少书至少有20篇评论。
我试过这个:
Select count(dinstict r.book_id)
From reviews r, review_good_bad rgb
Where r.review_id = rgb.review_id
Group by r.book_id
Having count (rgb.IsGood) >= 20
但这不是我想要的。有什么想法吗?
提前谢谢
2条答案
按热度按时间blmhpbnm1#
不能在GROUPBY子句中使用的列上进行聚合。
将查询用作子查询并聚合到:
dgiusagp2#
如果您想要代码建议的良好评价:
做不必要的比较——比如你的代码对
isGood
--充其量是误导性的,会导致糟糕的表现。聚合前过滤通常会提高性能。请注意,您的数据结构实际上没有意义。你应该把它储存起来
IsGood
在reviews
table。这也用正确的、明确的、标准的、可读的语法替换了你的古老语法
JOIN
语法。这也允许一些细节,比如using
条款。如果你不需要
IsGood
那么它不应该是查询中的引用。它也不应该放在table上。只需使用:这应该是你问题的最简单答案(如果不是关于好的评论的话)。