Sql 我列出了本月某一特定类型的前三大最受欢迎电影

Sql 我列出了本月某一特定类型的前三大最受欢迎电影,sql,sql-server,Sql,Sql Server,这是我关于DVD租赁的作业。问题是找到某一类型的前三名著名租借电影 下面是我完成了一半的怪异代码 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 你有一个好的开始。如果您想获得租用次数最多的电影,则需要查询该电影,然后计算其租用次数。然后选择前3

这是我关于DVD租赁的作业。问题是找到某一类型的前三名著名租借电影

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

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

你有一个好的开始。如果您想获得租用次数最多的电影,则需要查询该电影,然后计算其租用次数。然后选择前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

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

那么问题到底是什么呢?请不要提供指向场外文件共享的链接。如果您有对问题重要的信息,请将其包含在问题中。大多数使用Stack overflow的人要么是IT专业人士,要么是经验丰富的爱好者,他们知道从互联网上的匿名者那里下载文件要比下载好得多。。。因为我不知道如何将图片添加到问题中。谢谢你的提示。啊,难怪我不知道该怎么做,我不知道该怎么做。谢谢你的帮助和教导。