【问题标题】:Creating a view in SQL Server by retrieving some specific data通过检索某些特定数据在 SQL Server 中创建视图
【发布时间】:2016-02-17 14:58:04
【问题描述】:

我无法检索每种类型的列表,即该类型评分最高的电影。到目前为止,我已经加入了需要的表。

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

我有以下数据库图。

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

【问题讨论】:

    标签: sql-server tsql


    【解决方案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 函数的子查询来对所有电影进行排名。然后在外部查询中只保留那些在其流派中排名第一的电影行。

    ROW_NUMBER 函数添加额外的 ORDER BY 条件movie_id 只是为了确保排名既独特又稳定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2013-09-06
      • 1970-01-01
      • 1970-01-01
      • 2013-12-14
      相关资源
      最近更新 更多