Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Только учусь. Помогите дописать запрос

Анна Ярославцева Знаток (401), закрыт 1 месяц назад
Создайте запрос, который вернет каждый второй фильм из таблицы movies и связанных с ними жанров и режиссеров из таблиц genres и directors. А также ваш запрос должен выбрать и подсчитать количество отзывов для каждого фильма и записать результат в новое поле reviews.

Также ваш запрос должен вернуть средний рейтинг каждого фильма основанный на отзывах в таблице reviews, если у фильма нет отзывов (с рейтингом) тогда рейтинг для такого фильма должно быть равно 0.

Результат должен быть отсортирован по полю id из таблицы movies в порядке убывания.

Для округления среднего рейтинга используйте функцию ROUND


SELECT id,
title,
directors.name as director,
genres.name as genre,
IF ((ROUND(AVG(reviews.rating),0)) IS NULL, 0,(ROUND(AVG(reviews.rating),0))) AS rating,
COUNT(reviews.movie_id) AS reviews
FROM movies
WHERE ID % 2 = 0
LEFT JOIN reviews
ON movies.id = reviews.movie_id
LEFT JOIN directors
ON movies.director_id = directors.id
LEFT JOIN genres
ON movies.genre_id = genres.id
GROUP BY movies.id
ORDER BY movies.id DESC;
Лучший ответ
- Ученик (185) 1 месяц назад
 SELECT  
movies.id,
movies.title,
directors.name AS director,
genres.name AS genre,
COALESCE(ROUND(AVG(reviews.rating), 0), 0) AS rating,
COUNT(reviews.movie_id) AS reviews
FROM
movies
LEFT JOIN directors ON movies.director_id = directors.id
LEFT JOIN genres ON movies.genre_id = genres.id
LEFT JOIN reviews ON movies.id = reviews.movie_id
WHERE
movies.id % 2 = 0
GROUP BY
movies.id
ORDER BY
movies.id DESC;
LEFT JOIN перемещены до WHERE-условия, так как JOIN должен происходить перед фильтрацией записей.
Использован COALESCE для упрощения логики присваивания нулевого значения среднему рейтингу, когда отзывов нет. COALESCE возвращает первое ненулевое значение из списка его аргументов, что удобно для задачи присвоения рейтинга 0, если рейтинг не был рассчитан (AVG(reviews.rating) вернет NULL, если отзывов нет).
Условие movies.id % 2 = 0 для выбора каждого второго фильма корректно размещено в WHERE.
Анна ЯрославцеваЗнаток (401) 1 месяц назад
Добрый день,спасибо за подробный ответ с разъяснениями.
Остальные ответы
Похожие вопросы