Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MYSQL, Max, Gruppieren nach und 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

Irgendetwas stimmt mit Ihrem Schemaentwurf nicht. Wenn ein Movie kann viele Genre haben sowie Genre kann in vielen Movie enthalten sein , es sollte ein Drei-Tabellen-Design sein.

MovieDetails-Tabelle

  • MovieID (PK)
  • Filmname
  • Filmbewertung

Genretabelle

  • GenreID (PK)
  • GenreName

Movie_Genre-Tabelle

  • MovieID (FK) – zusammengesetzter Primärschlüssel mit GenreID
  • GenreID (FK)