Mysql
 sql >> Base de données >  >> RDS >> Mysql

MYSQL, Max, Grouper par et 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

Il y a un problème avec la conception de votre schéma. Si un Movie peut avoir plusieurs Genre ainsi que Genre peut être contenu sur plusieurs Movie , il devrait s'agir d'une conception à trois tables.

Tableau des détails du film

  • ID de film (PK)
  • Nom du film
  • Classement des films

Tableau des genres

  • Identifiant de genre (PK)
  • Nom du genre

Tableau Film_Genre

  • MovieID (FK) :clé primaire composée avec GenreID
  • ID de genre (FK)