sorry_i_noob
@sorry_i_noob

Как написать такой 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.
  • Вопрос задан
  • 123 просмотра
Пригласить эксперта
Ответы на вопрос 2
0xD34F
@0xD34F
рейтинг для каждой книги - COUNT записей

Не 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
Ответ написан
@bkosun
Примерно так:
SELECT 
	`books`.*, 
	COUNT(`br`.`rating`) AS `count`
FROM 
	`books` AS `b` 
	LEFT JOIN `books_rating` AS `br` on `b`.`id` = `br`.`book_id` 
GROUP BY 
	`b`.`id`
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы