2013-10-11 2 views
1

Рассмотрят следующую схему базы данных для базы данных магазина:SQL запросы на BookID

Books (bookid, title, author, year) 
Customers (customerid, name, email) 
Purchases (customerid, bookid, year) 
Reviews (customerid, bookid, rating) 
Pricing (bookid, format, price) 

Ive получил этот вопрос:

Найти информацию рейтингов (показать названия, автор и средние оценки) для книг по " «ГРАЖДАНСКАЯ ВОЙНА» (т. Е. Название содержит «ГРАЖДАНСКАЯ ВОЙНА»).

А что ив получил до сих пор:

SELECT title, author, AVG(r1.rating) 
FROM Books, Reviews 
WHERE title LIKE '%CIVIL WAR%' 

но его не так :( любая помощь будет оценена: D

+1

AND books.bookid = reviews.bookid –

+1

Вам также нужна группа по предложению. И псевдоним для отзывов. –

+0

и см. JOIN – Strawberry

ответ

3

Это соответствует структуре вы даете:

SELECT books.title, books.author, AVG(reviews.rating) 
    FROM books, reviews 
WHERE books.bookid = reviews.bookid 
    AND books.title LIKE '%CIVIL WAR%' 
GROUP BY books.title, books.author 

Вы могли бы также рассмотреть возможность использования JOIN вместо того, чтобы делать соединение в предложении WHERE, поскольку я делаю это:

FROM books 
JOIN reviews ON reviews.bookid = books.bookid 

Кроме того, рекомендуется использовать псевдоним для таблиц, так как это приведет к сокращению более сложных запросов:

FROM `Books b` 

--Will enable you to write 
AND b.title LIKE '%CIVIL WAR%' 
+1

Разве вы не бросаете 'r1.'? –

+2

'GROUP BY books.bookid, title, author' Маловероятно, что автор опубликовал две книги с таким же названием, но если есть, это испортит ваши результаты. –

+0

@PrzemyslawKruglej Вы правы. Обновлен запрос для полной квалификации. –

2

Попробуйте это:

SELECT B.title, B.author, AVG(R.rating) Avg_Rating 
FROM Books B 
    JOIN Reviews R 
    ON B.bookid = R.bookid 
WHERE B.title LIKE '%CIVIL WAR%' 
GROUP BY B.title, B.author 

Если у вас есть более одного заголовка/author, вы также можете группировать по bookid.

SELECT B.title, B.author, AVG(R.rating) Avg_Rating 
FROM Books B 
    JOIN Reviews R 
    ON B.bookid = R.bookid 
WHERE B.title LIKE '%CIVIL WAR%' 
GROUP BY B.bookid, B.title, B.author 
Смежные вопросы