Как написать такой SQL запрос (подробности внутри)?
Здравствуйте.
У меня есть книги. И их рейтинг. Книги в таблице books. Рейтинг - в books_rating. Проблема в устройстве таблицы books_rating. Там вот такие поля:
id, book_id, user_id, rating (1 и -1).
То есть, записи появляются только тогда, когда пользователь прорейтинговал книжку. Если отменяет свой рейтинг, то запись удаляется.
Как мне написать SQL запрос, который выводит все поля из таблицы books. И подсчитывает рейтинг для каждой книги - COUNT записей из таблицы books_rating. Записей, где поле book_id равно id из таблицы book. Ну а если в books_rating нет записей по данной книги, то 0.
Не COUNT. Если есть две записи по одной книге, у которых rating равен 1 и -1, то COUNT вернёт 2. А должно быть 0. Количество записей и сумма значений в столбце - не одно и то же.
SELECT b.*, COALESCE(SUM(br.rating), 0) rating
FROM books b
LEFT JOIN books_rating br ON br.book_id = b.id
GROUP BY b.id