Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida com Max e Min


thiagogoiis

Pergunta

Meu professor passou uma sequência de buscas para podermos passar o codigo SQL, porém, tem uma busca que eu não estou conseguindo fazer de maneira alguma.

A descrição da busca é a seguinte:

Para cada filme, retorne o título e a “diferença na classificação”, ou seja, a diferença entre a maior e

a menor classificação dada para aquele filme. Ordene pela “diferença na classificação” do maior

para o menor e depois pelo título do filme.

O titulo esta na tabela filme e a tabela mais relevante aqui que é a tabela de classificação está com dados inseridos da seguinte maneira:

Classificacao

rID | mID | estrelas | dataClassificacao

201 | 101 | 2 | 2011-01-22

201 | 101 | 4 | 2011-01-27

202 | 106 | 4 | Null

203 | 103 | 2 | 2011-01-20

203 | 108 | 4 | 2011-01-12

203 | 108 | 2 | 2011-01-30

204 | 101 | 3 | 2011-01-09

205 | 103 | 3 | 2011-01-27

205 | 104 | 2 | 2011-01-22

205 | 108 | 4 | Null

206 | 107 | 3 | 2011-01-15

206 | 106 | 5 | 2011-01-19

207 | 107 | 5 | 2011-01-20

208 | 104 | 3 | 2011-01-02

mID - é o código do filme (FK)

rID - é o código do revisor (FK)

estrelas - é a classificação dada ao filme pelo revisor

dataClassificacao - é a data em que a classificação foi feita

Se alguém souber como faz essa pesquisa se puder me ajudaria muito:

A pesquisa com resultado mais próximo que consegui foi:

SELECT title, estrelas FROM Filme JOIN Classificacao ON Filme.mID=Classificacao.mID WHERE estrelas IN (SELECT MAX(estrelas) - MIN(estrelas) FROM Classificacao WHERE Filme.mID=Classificacao.mID) ORDER BY title

Desde já agradeço!!

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0
Meu professor passou uma sequência de buscas para podermos passar o codigo SQL, porém, tem uma busca que eu não estou conseguindo fazer de maneira alguma.

A descrição da busca é a seguinte:

Para cada filme, retorne o título e a “diferença na classificação”, ou seja, a diferença entre a maior e

a menor classificação dada para aquele filme. Ordene pela “diferença na classificação” do maior

para o menor e depois pelo título do filme.

Faça assim:

SELECT DISTINCT c.mID AS filme,  
   cmax.estrelas AS Classificacao_maxima, 
   cmin.estrelas AS Classificacao_minima,
   (cmax.estrelas - cmin.estrelas) AS Diferenca
FROM classificacao c
INNER JOIN (SELECT cma.mID, MAX(cma.estrelas) AS estrelas FROM classificacao cma
GROUP BY cma.mID) cmax ON cmax.mID = c.mID
INNER JOIN (SELECT cmi.mID, MIN(cmi.estrelas) AS estrelas FROM classificacao cmi
GROUP BY cmi.mID) cmin ON cmin.mID = c.mID
ORDER BY diferenca DESC, filme ASC;

Acrescente os joins com o nome do filme. Não há a necessidade de mostrar o revisor pois o enunciado só pede o nome do filme e a classificação. Em meu exemplo mostrei a maior e a menor classificação. Também não é necessário mostrá-los.

Estude o exemplo e questione em caso de dúvidas.

Para os espertinhos de plantão: Só coloquei código porque o 'thiagogoiis' fez a parte dele no exercício e mostrou até onde ele conseguiu chegar.

'thiagogoiis' , para que seu entendimento seja rápido aqui vai mais uma dica: Todo o resultado de uma query (um select) é uma tabela virtual.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...