首页 > 解决方案 > 我列出了当月给定类型的前 3 部最受欢迎的电影

问题描述

这是我关于 DVD 出租的任务。问题是找到给定类型的顶级(3)著名租借电影。

下面是我完成了一半的奇怪代码。

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

标签: sqlsql-server

解决方案


此查询将返回给定时间段内按类型租借的前 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

推荐阅读