Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Solução sem SubQuery

Tenho dúvida no exercício utilizando In com subquery. Pensei em resolver da seguinte forma:

Select c.nome, a.nome, avg(n.nota) - (select avg(n.nota) from nota n) as diferenca from nota n join resposta r on r.id = n.resposta_id     join exercicio e on e.id = r.exercicio_id join secao s on s.id = e.secao_id join curso c on c.id = s.curso_id join aluno a on a.id = r.aluno_id join matricula m on m.aluno_id = a.id  where  m.data > (select sysdate - interval '6' month from     dual)  group by c.nome, a.nome;

No entanto, a solução do exercício é essa:

Select c.nome, a.nome, avg(n.nota) - (select avg(n.nota) from nota n) as diferenca from nota n join resposta r on r.id = n.resposta_id     join exercicio e on e.id = r.exercicio_id join secao s on s.id = e.secao_id join curso c on c.id = s.curso_id join aluno a on a.id = r.aluno_id where a.id in (select aluno_id from matricula where data > (select sysdate - interval '6' month from     dual))  group by c.nome, a.nome;

As duas formas produziriam o mesmo resultado pelo que testei. Não utilizar uma subquery seria uma vantagem, não?

3 respostas
solução!

Oi Bruna, acredito que seja uma vantagem sim. Só precisamos tomar cuidado por que as vezes o não uso da subquery deixa a consulta SQL complexa ou mesmo confusa.

Mas fiquei um pouco na dúvida, subquery não é quando você usa um select dentro de outro? Se sua resposta for sim, nos dois exemplos temos subqueries.

Desculpe, acabei colando duas vezes a mesma resposta na hora de editar a pergunta. Mas tomar cuidado quanto a complexidade para não deixar as buscas confusas. Obrigada!

Opa Bruna, você pode editar a pergunta e colar sua resposta novamente pra gente poder comparar quando ver por aqui.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software