2016-04-22 61 views
1

之间,其中平均收视我有2个表:选择ID的

表 “BIZ” 并表 “biz_rating”

BIZ

  • biz_id(INT)
  • 名(VARCHAR )

biz_rating

  • biz_rating_id(INT)
  • biz_id(INT)
  • 等级(INT)

我想查询选择ALL BIZ行,其中平均评级是1-2之间,或3-4,或< 5或> 5(评级是从0到5的数字)。

我从字面上没有想法如何开始。

我现在是这样的:

SELECT 
    biz_id 
FROM 
    biz 
WHERE 
    biz_id IN 
    (SELECT biz_id FROM biz_rating WHERE AVG(rating) BETWEEN 0 AND 5) 
ORDER BY 
    biz_id ASC 

但是这根本不工作。

+0

添加GROUP BY并从子选择中从WHERE切换到HAVING。 – jarlh

回答

1

您可以加入表,如果你想要的名字与编号

select biz_id,name,b2.avgrating 
from BIZ as B1, 
(select biz_id as bid, avg(rating) as avgrating 
from biz_rating 
group by biz_id 
having avg(rating) between 0 and 5) as B2 

where B1.biz_id=B2.bid 

这一起,如果你想

也将选择平均评分
0

只需使用聚合。你甚至都不需要这样的join

select br.biz_id 
from biz_rating br 
group by br.biz_id 
having avg(rating) between 1 and 2; -- or whatever limits you want