2016-04-22 4 views
1

Ich habe 2 Tabellen:Select-IDs, wo durchschnittliche Bewertung zwischen

Tabelle "biz" und Tabelle "biz_rating"

biz

  • biz_id (int)
  • Name (varchar)

biz_rating

  • biz_rating_id (int)
  • biz_id (int)
  • Bewertung (int)

Ich möchte eine Abfrage alle biz Zeilen auszuwählen, in dem die durchschnittliche Bewertung zwischen 1-2 ist, oder 3-4 oder < 5 oder> 5 (Bewertung ist eine Zahl von 0 bis 5).

Ich habe buchstäblich keine Ahnung, wie ich anfangen soll.

Ich habe so etwas wie dies jetzt:

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 

aber das ist gar nicht funktioniert.

+0

Fügen Sie GROUP BY hinzu, und wechseln Sie in der Unterauswahl von WHERE zu HAVING. – jarlh

Antwort

1

Sie können die Tabelle beitreten, wenn Sie den Namen

zusammen mit id wollen
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 

Dies wird auch die durchschnittliche Bewertung wählen, wenn Sie

wollen
0

Verwenden Sie einfach Aggregation. Sie brauchen nicht einmal eine join dafür:

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 
Verwandte Themen