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.