Jump to content
Fórum Script Brasil
  • 0

Dúvida com Max e Min


thiagogoiis

Question

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 to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...