Pytanie do ekspertów SQL

0

Cześć. Mam następujący problem.
Istnieją dwie tabelki:

Books(id, name)
Ratings(id, rating, book_id)

Oczywiście book_id ma klucz obcy na id z tabeli books

Potrzebuję napisać zapytanie, które wyświetla książki, których średnia ocen jest większa od 3.
Doszedłem do takiego etapu:

SELECT * FROM books b JOIN ratings r ON b.id = r.book_id 

Nie jestem przekonany czy tutaj w ogóle będzie potrzebny join, wtedy w wyniku otrzymamy złączenie, a ja potrzebuję tylko tabeli books.
Z góry przepraszam, ale nie jestem ekspertem sql. Jeśli dla kogoś to banalne, proszę o wyrozumiałość... ;)

0

SELECT b.id, b.name FROM books b JOIN ratings r ON b.id = r.book_id WHERE rating > 3

0

A takie coś nie zatrybi?

SELECT *
FROM books b, ratings r
WHERE b.id = r.book_id AND r.rating > 3;
2
SELECT b,id FROM books b JOIN ratings r ON b.id = r.book_id GROUP BY b.id HAVING AVG(r.rating)>3
0
m4ck napisał(a):

SELECT b.id, b.name FROM books b JOIN ratings r ON b.id = r.book_id WHERE rating > 3

Spine napisał(a):

A takie coś nie zatrybi?

SELECT *
FROM books b, ratings r
WHERE b.id = r.book_id AND r.rating > 3;

Wasze rozwiązania nie obliczą średniej. Właśnie chodziło mi o coś takiego jak w ostatniej odpowiedzi. Dziękuję bardzo.

0

No tak, nie zwróciłem uwagi na ten aspekt zadania. Możesz spróbować jeszcze tak (nie mam pod ręką odpowiedniej bazy do sprawdzenia ;) ):

SELECT b.name, AVG(r.rating) AS rat
FROM books b, ratings r
WHERE b.id = r.book_id AND rat > 3
GROUP BY r.book_id;

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0