Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

bichopapo

Selecionar todos alunos com todas as notas acima da média

Recommended Posts

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..


Compartilhar este post


Link para o post
Compartilhar em outros sites

Conte as distintas matérias com notas maiores que 20 e veja se são iguais as dintintas matérias.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.