通过检索某些特定数据在SQL Server中创建视图

时间:2016-02-17 14:58:05

标签: sql-server

我无法检索列表中的每种类型,具有该类型的最高评级的电影。到目前为止,我已经加入了所需的表格。

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

我有以下数据库图表。

enter image description here

如何创建一个列出每种类型的视图,以及该类型的最高评级的电影?

1 个答案:

答案 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只是为了确保排名既独特又稳定。