Estou participando do curso gratuito de DB em Stanford Online e, francamente, um dos exercícios me deu alguns problemas. Tenho a sensação de que isso deve ser terrivelmente simples; portanto, para um DBA, obviamente não sou muito bom com SQL.
Estamos trabalhando com um cenário simplificado para classificar filmes.
Para todos os casos em que o mesmo crítico avaliou o mesmo filme duas vezes e deu a ele uma classificação mais alta na segunda vez, retorne o nome do crítico e o título do filme.
Aqui está o esquema:
Movie ( mID, title, year, director )
Reviewer ( rID, name )
Rating ( rID, mID, stars, ratingDate )
Como devo proceder?
Você pode se juntar a tabelas para esse tipo de critério (pelo menos, posso fazer isso no SQL Server):
Observe que estamos unindo a classificação de volta a si mesma. Dessa forma, podemos usar a cláusula WHERE para encontrar linhas em
rating
que são maiores em data e estrelas para outras linhas emrating
.Você pode revisar o exemplo completo que criei no SQL Fiddle aqui .
Se você quiser adicionar a condição de que o revisor fez exatamente essas 2 resenhas do filme e não mais, você pode adicionar:
Isso pressupõe que a
Rating
tabela tenha(rID, mID, ratingDate)
como chave primária.Aqui está uma solução analítica usando as tabelas Miracle173 construídas no SQL Fiddle. A análise alivia a necessidade de consultar a tabela de classificações
duasa três vezes.http://sqlfiddle.com/#!4/6957e/16
Você pode conferir em http://sqlfiddle.com/#!4/6957e/7 .
Considerará apenas os filmes de um crítico que ele avaliou exatamente duas vezes
Uma solução que combina partes das respostas anteriores é a seguinte: