我无法检索列表中的每种类型,具有该类型的最高评级的电影。到目前为止,我已经加入了所需的表格。
SELECT
movie_title,genre, rating
FROM
movie
JOIN
dvd_movie ON movie.movie_id = dvd_movie.movie_id
JOIN
dvd ON dvd_movie.dvd_id = dvd.dvd_id
JOIN
language_audio_dvd ON language_audio_dvd.dvd_id = dvd.dvd_id
JOIN
rating ON rating.rating_id = movie.rating_id
JOIN
genre ON genre.genre_id = movie.genre_id
我有以下数据库图表。
如何创建一个列出每种类型的视图,以及该类型的最高评级的电影?
答案 0 :(得分:1)
有很多方法可以做到这一点,这是一种更简单的方法:
SELECT movie_title,genre, rating
FROM (
SELECT movie_title,
genre_id,
rating,
ROW_NUMBER() OVER(PARTITION BY genre_id
ORDER BY rating, movie_id) AS gRank
FROM movie
JOIN rating ON rating.rating_id = movie.rating_id
) AS movie
JOIN genre ON genre.genre_id = movie.genre_id
WHERE gRank = 1
这使用带有ROW_NUMBER函数的子查询来对其类型中的所有电影进行排名。然后在外部查询中仅保留那些在其类型中排名为1的电影行。
ROW_NUMBER函数添加额外的ORDER BY条件movie_id
只是为了确保排名既独特又稳定。