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

MYSQL, Max, Group by og 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

Der er noget galt med dit skemadesign. Hvis en Movie kan have mange Genre samt Genre kan indeholde på mange Movie , det skal være et design med tre borde.

Tabel med filmdetaljer

  • Film-id (PK)
  • Filmnavn
  • MovieRating

Genre-tabel

  • GenreID (PK)
  • Genrenavn

Tabel over filmgenre

  • Film-ID (FK) – sammensat primær nøgle med GenreID
  • GenreID (FK)


  1. Stræk databasen i SQL Server 2016 RTM

  2. Hvorfor tilføjer 'indsæt'-funktionen ikke rækker ved hjælp af MySQLdb?

  3. SQL for at finde det første ikke-numeriske tegn i en streng

  4. Gruppering registrerer time for time eller dag for dag og udfylder huller med nul eller nul