2016-02-17 3 views
1

У меня возникли проблемы с получением списка для каждого жанра, фильмов с максимальным рейтингом для этого жанра. До сих пор я присоединился к таблице, которая необходима.Создание представления в 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

Есть несколько способов сделать это, вот один из самых простых способов:

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 только для обеспечения того, чтобы ранжирование было уникальным и стабильным.

Смежные вопросы