Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MYSQL, Max, Agrupar por e Max

SELECT  g.*, d.*
FROM    MovieGenre g
        INNER JOIN MovieDetail d
            ON g.MovieID = d.MovieID
        INNER JOIN
        (
            SELECT  a.Genre, MAX(b.Rating) maxRating
            FROM    MovieGenre a
                    INNER JOIN MovieDetail b
                        ON a.MovieID = b.MovieID
            GROUP   BY a.Genre
        ) sub ON    g.Genre = sub.Genre AND
                    d.rating = sub.maxRating

Há algo errado com o design do seu esquema. Se um Movie pode ter muitos Genre bem como Genre pode conter em muitos Movie , deve ser um design de três tabelas.

Tabela de detalhes do filme
  • MovieID (PK)
  • Nome do filme
  • Classificação de filmes

Tabela de gênero
  • GenreID (PK)
  • GenreName

Tabela Movie_Genre
  • MovieID (FK) -- chave primária composta com GenreID
  • GenreID (FK)