Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

IN é necessário para solucionar o excercício?

Oi Pessoal, realizei o exercício com a seguinte query:

select a.nome, avg(n1.nota), avg(n1.nota) - (select avg(n2.nota) from nota n2) from nota n1 join resposta r on r.id=n1.resposta_id join aluno a on a.id=r.aluno_id join matricula m on m.aluno_id=a.id where m.data < now() - interval 3 month group by a.nome; Foi me retornado o seguinte resultado: | nome | avg(n1.nota) | avg(n1.nota) - (select avg(n2.nota) from nota n2) | +-----------------+--------------+---------------------------------------------------+ | João da Silva | 6.2857 | 0.5450 | | Frederico José | 6.2500 | 0.5093 | | Alberto Santos | 5.7778 | 0.0370 | | Renata Alonso | 4.8571 | -0.8836 | +-----------------+--------------+---------------------------------------------------+

Depois inverti o sinal de "menor" e a query retornou vazia. Vi que o exercício é focado para utilizar uma subuery com o IN. Mas ela é realmente necessária para trazer os dados que precisamos? Pois a opinião do instrutor ele faz um JOIN na tabela de Seção que retorna vazio, como mostra abaixo:

select a.nome, avg(n1.nota) as media, avg(n1.nota) - (select avg(n2.nota) from nota n2) as diferenca from nota n1 join resposta r on r.id = n1.resposta_id join exercicio e on e.id = r.exercicio_id join secao s on s.id = e.secao_id join aluno a on a.id = r.aluno_id where a.id in (select aluno_id from matricula where data > now() - interval 3 month) group by a.nome ; Para que fazer o JOIN em na tabela de Seção se posso fazer o JOIN direto na tabela de matrícula e evitar esta volta?

Espero ter sido claro.

1 resposta
solução!

Para que fazer o JOIN em na tabela de Seção se posso fazer o JOIN direto na tabela de matrícula e evitar esta volta? Só pra fins didáticos. Na prática encontre um equilibrio entre perfomance e clareza de código.