sql >> Base de Datos >  >> RDS >> Mysql

MYSQL, Max, Agrupar por y 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

Hay algo mal con el diseño de su esquema. Si una Movie puede tener muchos Genre así como Genre puede estar contenido en muchas Movie , debe ser un diseño de tres mesas.

Tabla de detalles de la película

  • ID de película (PK)
  • Nombre de la película
  • Clasificación de películas

Tabla de géneros

  • ID de género (PK)
  • Nombre del género

Tabla de géneros_de_películas

  • MovieID (FK):clave principal compuesta con GenreID
  • ID de género (FK)