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.