sql - 我列出了当月给定类型的前 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
解决方案
此查询将返回给定时间段内按类型租借的前 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
推荐阅读
- java - 2 RestTemplate,但不可能选择第二个
- security - 是什么阻止了黑客在非对称加密中伪装成具有公钥的服务器/客户端?
- c - 使用 sprintf 将整数转换为字符串似乎忽略了 0
- mysql - MySQL VARCHAR 或 TEXT
- jquery - 检测空列以修改 Bootstrap 3 网格
- coldfusion - 如何有条件地将参数传递给 CFC 的实例?
- jquery - Jquery悬停在Draggable Div后如何恢复到原始CSS和Html?
- google-chrome - googCurrentDelayMs 是什么意思,哪些设置会影响它的值?
- python - 使用间隔索引在 DataFrame 中设置特定值
- mysql - 如何从另一个表中获取值