Solucionado (ver solução)
Solucionado
(ver solução)
7
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.

Obrigado.

7 respostas

Oi Adones,

Veja que a diferença é o JOIN a mais na seção.

Provavelmente os dados estão inconsistentes, e o aluno Frederico José tem nota para exercícios de seções que não existem!

Verifica isso na tabela!

Um abraço!

Verifique não consegui identificar essa inconsistência,posso estar errado mas acho que o problema é que o aluno Frederico josé tem matricula no curso Desenvolvimento web com VRaptor, e não tem nota nos exercícios desse curso.

Obrigado Maurício.

Oi Adones,

Não tem nota, mas então como apareceram notas na sua primeira consulta? Entende?

Qual a query vc usou para ver que a incosistência não existe?

Não consegui fazer uma query que me ajudace, mas olhando na tabela resposta vi que só existem 4 respostas dadas pelo aluno de id = 2 (Frederico josé), e na tabela nota as notas para essas respostam somadas é igual a 25 ou seja a media é 6,25 igual a média devolvida para os dois cursos em que o aluno está matriculado, então eu pensei que pela forma que o select está agrupado a média estivesse se repetindo nos dois cursos.

Eu mudei a query a fim de obter o nome do aluno, nome do curso, resposta dada e a nota:

select  a.nome, c.nome,r.resposta_dada,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,n.nota;

resultado:

+-----------------+---------------------------------+-----------------------------------------------------------------------------------+------+
| nome            | nome                            | resposta_dada                                                                     | nota |
+-----------------+---------------------------------+-----------------------------------------------------------------------------------+------+
| Frederico José  | Desenvolvimento web com VRaptor | buscar dados                                                                      |    4 |
| Frederico José  | Desenvolvimento web com VRaptor | ixi, nao sei                                                                      |    6 |
| Frederico José  | Desenvolvimento web com VRaptor | select campos from tabela                                                         |    7 |
| Frederico José  | Desenvolvimento web com VRaptor | alterar coisas                                                                    |    8 |
| Renata Alonso   | PHP e MySql                     | banco de dados!                                                                   |    0 |
| Renata Alonso   | PHP e MySql                     | eh colocar a app na internet                                                      |    1 |
| Renata Alonso   | PHP e MySql                     | nao sei                                                                           |    2 |
| Renata Alonso   | PHP e MySql                     | depende da tecnologia, mas geralmente eh levar pra um servidor que ta na internet |    4 |
| Renata Alonso   | PHP e MySql                     | eh a internet                                                                     |    8 |
| Renata Alonso   | PHP e MySql                     | browser faz requisicao, servidor manda resposta                                   |    9 |
| Renata Alonso   | PHP e MySql                     | eh o servidor que lida com http                                                   |   10 |
| Alberto Santos  | Scrum e métodos ágeis           | todo dia                                                                          |    3 |
| Alberto Santos  | Scrum e métodos ágeis           | 1 a 4 semanas                                                                     |    4 |
| Alberto Santos  | Scrum e métodos ágeis           | reuniao de status                                                                 |    5 |
| Alberto Santos  | Scrum e métodos ágeis           | um metodo agil                                                                    |    6 |
| Alberto Santos  | Scrum e métodos ágeis           | tempo pra fazer algo                                                              |    7 |
| Alberto Santos  | Scrum e métodos ágeis           | tem varios outros                                                                 |    8 |
| Alberto Santos  | Scrum e métodos ágeis           | melhoria do processo                                                              |    9 |
| Frederico José  | SQL e banco de dados            | buscar dados                                                                      |    4 |
| Frederico José  | SQL e banco de dados            | ixi, nao sei                                                                      |    6 |
| Frederico José  | SQL e banco de dados            | select campos from tabela                                                         |    7 |
| Frederico José  | SQL e banco de dados            | alterar coisas                                                                    |    8 |
| João da Silva   | SQL e banco de dados            | ixi, nao sei                                                                      |    0 |
| João da Silva   | SQL e banco de dados            | inserir dados                                                                     |    4 |
| João da Silva   | SQL e banco de dados            | eskecer o where e alterar tudo                                                    |    6 |
| João da Silva   | SQL e banco de dados            | alterar dados                                                                     |    7 |
| João da Silva   | SQL e banco de dados            | uma selecao                                                                       |    8 |
| João da Silva   | SQL e banco de dados            | apagar coisas                                                                     |    9 |
| João da Silva   | SQL e banco de dados            | tb nao pode eskecer o where                                                       |   10 |
+-----------------+---------------------------------+-----------------------------------------------------------------------------------+------+

O Frederico josé aqui se relaciona com 8 respostas 4 pra cada curso, mas elas se repetem e parecem ser respostas relacionadas ao curso SQL e banco de dados.

Obrigado mais uma vez.

solução!

Oi Adones,

Exiba o Notas.ID dessas respostas também, pra ver se é o SELECT que trouxe repetido, ou foi sua query!

Acredito que a resposta oficial desse exercício deve ser alterada, uma vez que se encontra equivocada. Também passei pela mesma inconsistência entre os resultados trazido pela query que está como correta.

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