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

Por que essas queries devolvem resultados diferentes?

Essas queries correspondem ao exercício 6 do capitulo 3 do curso Banco de dados e consultas complexas com sql. Essa é o código que eu criei:

select  a.nome, c.nome, avg(n.nota)
from nota n 
join resposta r on n.resposta_id = r.id 
join aluno a on r.aluno_id = a.id 
join matricula m on m.aluno_id = a.id 
join curso c on m.curso_id = c.id 
group by c.nome,a.nome;

Resultado:

+-----------------+---------------------------------+-------------+
| nome            | nome                            | avg(n.nota) |
+-----------------+---------------------------------+-------------+
| Frederico José  | Desenvolvimento web com VRaptor |      6.2500 |
| Renata Alonso   | PHP e MySql                     |      4.8571 |
| Alberto Santos  | Scrum e métodos ágeis           |      5.7778 |
| Frederico José  | SQL e banco de dados            |      6.2500 |
| João da Silva   | SQL e banco de dados            |      6.2857 |
+-----------------+---------------------------------+-------------+

Esse e dado como resposta certa do exercício:

select a.nome, c.nome, avg(n.nota) 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
group by c.nome, a.nome

Resultado:

+-----------------+-------------------------+-------------+
| nome            | nome                    | avg(n.nota) |
+-----------------+-------------------------+-------------+
| Renata Alonso   | PHP e MySql             |      4.8571 |
| Alberto Santos  | Scrum e métodos ágeis   |      5.7778 |
| Frederico José  | SQL e banco de dados    |      6.2500 |
| João da Silva   | SQL e banco de dados    |      6.2857 |
+-----------------+-------------------------+-------------+
4 rows in set (0.00 sec)

Só queria entender porque o primeiro código devolve um campo a mais.

4 respostas

Provavelmente porque sua consulta está baseando seus relacionamentos na tabela aluno, e não nas outras tabelas. Veja a sequência dos joins como está diferente.

Nota também que na resposta existe um join com a tabela exercicio, que não existe na tua consulta.

Olá Adones, tudo bem? Acabei de finalizar este módulo e quebrei um pouco a cabeça para entender isso, acabei tendo o mesmo problema que você.

Entendi que é necessário declarar todos os relacionamentos envolvidos nos joins, no seu caso faltou apenas atrelar o relacionamento de exercício e resposta.

solução!

Oi Adones,

Acho que te respondi isso em outra dúvida, certo?