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

Dúvida nesta na seguinte SQL

Queria entender pq uma simples diferença de código(o primeiro não contém um group by, e o segundo sim) produziu uma diferença na média do mesmo aluno, que aparece menor na segunda:

mysql> 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 gr
oup by c.nome, a.nome;

+----------------+-----------------------+-------------+
| 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.12 sec)

mysql> 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;
+---------------+----------------------+-------------+
| nome          | nome                 | avg(n.nota) |
+---------------+----------------------+-------------+
| JoÒo da Silva | SQL e banco de dados |      5.7407 |
+---------------+----------------------+-------------+
1 row in set (0.00 sec)
1 resposta
solução!

Oi Thiago,

Na segunda query, sem group by, o banco ficou maluco! Veja só que vc pediu pra selecionar TODOS os alunos e suas médias, e o resultado foi apenas um aluno com uma média maluca.

Eu não tenho uma boa explicação sobre o resultado que o banco devolve quando pega uma SQL dessas incorreta. Nunca parei pra estudar, na verdade, afinal a instrução é inválida.

Sempre que vc usa uma função de agregação de dados, vc precisa ensiná-lo a agrupar, por meio do group by.

Faz sentido?