5
respostas

Query diferente para respota

Olá, gostaria de verificar se minha query é aceita como resposta: select avg(n.nota), a.nome, c.nome 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 matricula m on m.curso_id=c.id -> join aluno a on a.id=m.aluno_id -> group by a.id, c.id;

Acredito que não pois os valores foram diferentes.

5 respostas

Porque tá usando ->?

A resposta é

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

O -> é porque eu copiei e colei do SQL Server.

Eu sei qual é a resposta. Eu consegui agrupar corretamente mas os valores estão errados.

A dúvida correta que devia ter perguntado é por que da diferença nos valores das médias das notas quanto faço um JOIN a mais. Por exemplo, na minha query eu inseri a tabela de matrícula. Na lógica adicionando ou não o JOIN na tavela de Matricula, o resultado não seria o mesmo? Por que houve alteração no valores da médias?

Consegue colar aqui o script de criação e insert desse banco de dados? Aí poderia importar os dados e dar uma analisada com mais calma.

Oi André, este banco está disponível para download no início deste curso, MySQL II. Eu importei os dados deste arquivo SQL. Nos exercícios não tem um script de construção do banco. Se você der uma procurada nas primeiras aulas do curso achará sem problemas.

Desculpe a demora. Tava reinstalando meu MySql pois ele tava dando erro.

Então a sua consulta está retornando dados errados porque colocou join matricula m on m.curso_id=c.id que fez um cruzamento errado pois você cruzou a matricula do curso com o id do curso . Já o professor não fez isso.

Então toda vez que quiser depurar um calculo, tire o group by e retorne todas colunas da query.

Compare a sua

select  * 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=m.aluno_id 
 join matricula m on m.curso_id=c.id 

com a do professor

select * 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

e veja como errou.