Я создаю список 3 самых популярных фильмов для данного жанра за текущий месяц - PullRequest
0 голосов
/ 27 июня 2019

Это мое задание о прокате DVD.Вопрос в том, чтобы найти топ (3) знаменитого арендованного фильма для данного жанра.Вот мой стол.

https://drive.google.com/drive/folders/17RuEb-o8tXsAHGYAbjmQmlJaYZZUAEeE?usp=sharing.

Ниже мой наполовину странный код.

SELECT TOP(3)
FROM MOVIE mv
INNER JOIN DVD dvd ON dvd.movie_id = mv.movie_id
INNER JOIN RENTAL rt ON rt.dvd_id = dvd.dvd_id
WHERE movie_id = movie_id

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Этот запрос вернет всю информацию о фильмах для лучших фильмов N (со связями) по жанрам, взятым напрокат в данный период времени.

declare @StartDate date = '20190601'
    ,@EndDate date = '20190630'
    ,@Top int = 3

;With RentalCounts as
(
SELECT genre, mv.movie_id, Count(*) Ct
FROM MOVIE mv
INNER JOIN DVD dvd ON dvd.movie_id = mv.movie_id
INNER JOIN RENTAL rt ON rt.dvd_id = dvd.dvd_id
WHERE rt.[RentalDate] between @StartDate and @EndDate
group by genre, mv.movie_id
)
, ranked as
(
select *, ranked = rank() over (partition by movie_id, genre order by Ct desc)
from RentalCounts 
)

select mv.*
from ranked r
   join movie m on movie.movie_id = r.MovieID
where ranked.Ct <=@top
0 голосов
/ 27 июня 2019

У вас хорошее начало. Если вы хотите получить фильмы с наибольшей арендой, вы хотите запросить фильм, а затем посчитать, сколько раз он был взят в аренду. Затем вы выбираете первые 3 результата, упорядочиваете их в порядке убывания и включаете подсказку WITH TIES, чтобы убедиться, что вы включаете результаты с тем же количеством, что и большинство арендованных.

SELECT TOP 3 WITH TIES mv.movie, COUNT(rt.id) AS times_rented
FROM MOVIE mv
INNER JOIN DVD dvd ON dvd.movie_id = mv.movie_id
INNER JOIN RENTAL rt ON rt.dvd_id = dvd.dvd_id
GROUP BY mv.movie
ORDER BY COUNT(rt.id) DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...