Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL, Max, Raggruppa per 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

C'è qualcosa di sbagliato nella progettazione dello schema. Se un Movie può avere molti Genre così come Genre può essere contenuto in molti Movie , dovrebbe essere un design a tre tavoli.

Tabella MovieDetails

  • MovieID (PK)
  • NomeFilm
  • Classificazione dei film

Tabella dei generi

  • ID Genere (PK)
  • Nomegenere

Tabella Movie_Genere

  • MovieID (FK) -- chiave primaria composta con GenreID
  • ID Genere (FK)