2016-04-22 3 views
1

У меня есть 2 таблицы:Select удостоверения личности между

стол "бизнес" и таблица "biz_rating"

биз

  • biz_id (интермедиат)
  • имя (VARCHAR)

biz_rating

  • biz_rating_id (интермедиат)
  • biz_id (интермедиат)
  • рейтинга (интермедиат)

Я хочу, чтобы запрос, чтобы выбрать весь БИЗ строку, где средняя оценка составляет около 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