bichopapo 0 Denunciar post Postado Setembro 9, 2015 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
Motta 645 Denunciar post Postado Setembro 9, 2015 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
bichopapo 0 Denunciar post Postado Setembro 9, 2015 tudo isso no mesmo select? como ficaria o distinct nesse caso? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Setembro 9, 2015 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
bichopapo 0 Denunciar post Postado Setembro 9, 2015 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_alunoscod_alunoalunocod_turma*tb_turmascod_turmaturma*tb_disciplinascod_disciplinadisciplina*tb_disc_prof_turmacod_disc_prof_turmacod_disccod_turma cod_professor*tb_avaliacoescod_avaliacaocod_disc_prof_turmatrimestrevalor*tb_notascod_notacod_avaliacaocod_alunovalor_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