Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho uma tabela de alunos e uma tabela de notas... relacionados pelo id_aluno...
Na tabela notas, tenho um campo que é o id da matéria, ou seja, para que o aluno tenha determinada nota em determinada matéria
Preciso selecionar todos os alunos que tiveram nota maior que 20, por exemplo... para isso usei tranquilamente o having... where...
A questão é que preciso selecionar todos os alunos que tem nota maior que vinte, so que tem que ser em todas as matérias... ou seja, se tem 5 matérias, e o aluno tem notas maiores que 20 em quatro matérias, ele não pode entrar na consulta, pois teria que ter nota maior que 20 em todas..
tudo isso no mesmo select?
como ficaria o distinct nesse caso?
algo assim
SELECT *
FROM ALUNOS
WHERE (SELECT COUNT DISTINCT ID_MATERIA
FROM NOTAS N1
WHERE N1.ID_ALUNO = A.ID_ALUNO) =
(SELECT COUNT DISTINCT ID_MATERIA
FROM NOTAS N2
WHERE N2.ID_ALUNO = A.ID_ALUNO
AND N2.NOTA > 20)Ola Motta,
Fiz o select aqui e aparentemente funcionou... vou conferir os dados para ver se está correto
Tive que fazer umas adaptações, pois criei uns relacionamentos... Veja como estão minhas tabelas e como ficou o código (baseado no que foi indicado acima)
só que não aparece na consulta o total de matérias que tem em cada turma e também a quantidade de matérias que o aluno passou...
*tb_alunos
cod_aluno
aluno
cod_turma
*tb_turmas
cod_turma
turma
*tb_disciplinas
cod_disciplina
disciplina
*tb_disc_prof_turma
cod_disc_prof_turma
cod_disc
cod_turma
cod_professor
*tb_avaliacoes
cod_avaliacao
cod_disc_prof_turma
trimestre
valor
*tb_notas
cod_nota
cod_avaliacao
cod_aluno
valor_nota_maior
//////
Só lembrando..
Preciso somar as notas de cada aluno em cada disciplina
Preciso saber quais alunos atingiram - com a soma das notas - acima de 18 em todas as matérias que pertencem a turma desse aluno..
SE na turma A, por exemplo... os alunos estudam Mat, Port, Geo...
Para aparecer na consulta, o aluno tem que ter a soma das notas acima de 18 em todas as três...
SELECT *
FROM tb_alunos al
WHERE (SELECT COUNT(DISTINCT dpt.cod_disc_prof_turma) as tt1
FROM tb_notas n1
inner join tb_avaliacoes av
on n1.cod_avaliacao = av.cod_avaliacao
inner join tb_disc_prof_turma dpt
on dpt.cod_disc_prof_turma = av.cod_disc_prof_turma
WHERE n1.cod_aluno = al.cod_aluno) =
(SELECT COUNT(DISTINCT dpt2.cod_disc_prof_turma) as tt2
FROM tb_notas n2
inner join tb_avaliacoes av2
on n2.cod_avaliacao = av2.cod_avaliacao
inner join tb_disc_prof_turma dpt2
on dpt2.cod_disc_prof_turma = av2.cod_disc_prof_turma
WHERE n2.cod_aluno = al.cod_aluno
AND n2.valor_nota_maior > 5)
Conte as distintas matérias com notas maiores que 20 e veja se são iguais as dintintas matérias.