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

A query de resposta retorna vazia. É isso mesmo?

Boa tarde!

A resposta sugerida é essa:

select a.nome, avg(n1.nota) as media,
    -> avg(n1.nota) - (select avg(n2.nota) from nota n2) as diferenca
    -> from nota n1
    -> join resposta r on r.id = n1.resposta_id
    -> join exercicio e on e.id = r.exercicio_id
    -> join secao s on s.id = e.secao_id
    -> join aluno a on a.id = r.aluno_id
    -> where
    -> a.id in (select aluno_id from matricula where data > now() - interval
onth)
    -> group by a.nome;

Esse foi o resultado

Empty set (0.00 sec)

O sql que eu escrevi foi esse:

select a.nome, avg(n1.nota) as média,
    -> avg(n1.nota) - (select avg(n2.nota) from nota n2) as diferença
    -> from nota n1
    -> join resposta r on r.id = n1.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
    -> join matricula m on m.aluno_id = a.id
    -> where m.data > (now() - interval 3 month)
    -> group by a.nome;

E deu o mesmo resultado.

Empty set (0.00 sec)

Alterei a sql sugerida para:

select a.nome, avg(n1.nota) as media, 
avg(n1.nota) - (select avg(n2.nota) from nota n2) as diferenca
from nota n1
join resposta r on r.id = n1.resposta_id
join exercicio e on e.id = r.exercicio_id
join secao s on s.id = e.secao_id
join aluno a on a.id = r.aluno_id
where 
a.id in (select aluno_id from matricula where data < now() - interval 3 month)
group by a.nome;

E o resultado foi esse:

+----------------+--------+-----------+
| nome           | media  | diferenca |
+----------------+--------+-----------+
| Alberto Santos | 5.7778 |    0.0370 |
| Frederico José | 6.2500 |    0.5093 |
| João da Silva  | 6.2857 |    0.5450 |
| Renata Alonso  | 4.8571 |   -0.8836 |
+----------------+--------+-----------+
4 rows in set (0.00 sec)

Alterei minha query para:

select a.nome, avg(n1.nota) as média, 
avg(n1.nota) - (select avg(n2.nota) from nota n2) as diferença 
from nota n1 
join resposta r on r.id = n1.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 
join matricula m on m.aluno_id = a.id 
where m.data < (now() - interval 3 month) 
group by a.nome;

E deu o mesmo resultado da resposta alterada.

2 respostas
solução!

Fala ai Jonas, tudo bem ?

Valeu pelo feedback, vamos dar uma analisada nisso e se for o caso faremos uma alteração.

Beleza! Obrigado pela resposta!