Ir para conteúdo

Arquivado

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

Asprendendo2010

[Resolvido] where

Recommended Posts

Fala pessoal beleza?

 

Seguinte.. tenho um banco onde armazena notas, materias periodo e alunos, queria saber como eu faço um where p/ me mostrar somente os alunos q tenham passado em todas as matérias de um determinado semestre.

 

Estou fazendo assim

 

 

select ....

where

notas >= '5.00' 

 

Aí ele me mostra todas as notas acima de 5.00 dos alunos, aí vamos supor se o semestre tem 4 materias, o cara passa em 3 e reprova em uma... meu SELECT retorna o nome desse cara... e eu não quero ele... quero só quem PASSOU EM TODAS...

 

Se puderem me ajudar ficarei grato...

 

Não sei se fui muito preciso na explicação, mas vou tentar bolar uma situação melhor

 

Desde já agradeço pela atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

seleciona todos os alunos quenão tem nenhuma nota abaixo da limite

Compartilhar este post


Link para o post
Compartilhar em outros sites

como fez?

 

qual a estrutura de seu db que armazena estas notas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma solução :

 

Faça assim

 

um select que conte quantas materias o aluno teve acima da média

 

um select que conte quantas materias o aluno fez (qq nota)

 

"junte" este dois selects como tabela virtuais e veja em quais a quantidade e a mesma.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode fazer um select contendo um count para saber quantas notas ele tem no sistema, desta maneira poderá em seguida fazer um SUM para poder saber a somatoria destas notas, dividindo então pela quantidade de notas que ele tem, se for mais que 5 você mostra

 

já usei desta maneira e funcionou, a query não ficou tão pesada

 

outra forma é você realizar um select com o nome de todos os alunos, insere este select dentro de um cursor, aí passa aluno por aluno, quando for média menor que 5 coloca em uma tabela temporária, quando for média maior que 5 coloca em outra tabela temporária, depois cruza as duas tabelas, os usuários que tem em uma e não estiverem na outra é porque não possuem notas menores, desta maneira você terá aqueles que realmente deseja

 

se desejar coloque a estrutura das tabelas aqui que monto uma query para você buscando estas informações da maneira que deseja

 

abs

 

jorge

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 possibilidade: a condição AND obriga o banco a selecionar apenas os dados que atendam a todas as condições; assim, supondo q você tenha 1 coluna p/ cada nota:

 

SELECT ...

FROM tabela

WHERE (nota1 >= 5) AND (nota2 >= 5) AND (nota3 >= 5) etc..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala pessoal desde já queria agradecer, pela ajuda de vocês, acabei de entrar no forum não tive acesso no fds... Vou testar aqui a dica de vocês agora, e ver no que dá, mais tarde reporto aqui os acontecimentos...

 

:joia:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cada linha é uma combinação

 

aluno + materia + semestre ???

 

e possui um cadastro separado de alunos ???

 

se for assim você pode usar a clausula not exists

 

select * from alunos
where not exists 
(select * from notas where notas < 5 and alunos.idAluno = notas.idAluno)

 

estou supondo, supondo e nada além disso que você possui duas tabelas notas & alunos e que possui um campo idAluno

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aí pessoal tava explicando tudo detalhadinho aqui e navegador travou... ooo raiva...rs

 

 

Vamos lá de novo...

 

Seguinte eu consegui pegar em queries separadas os alunos que forma aprovados em todas as matérias do 1º semestre. E os que reprovaram em pelo menos 1ª matéria no 2º semestre.

 

Mas não consegui unir esses dois selects p/ me trazer o resultado que preciso.

 

Já tentei com CURSOR e com UNION...

 

segue o codigo:

 

 

Select que me traz todos os alunos que passaram em todas as disciplinas no 1º semestre

 


select 
a.nome, 
COUNT(ti.mediafinal) as 'Md'
from 
alunos a
inner join turma_info ti on ti.matricula = a.matricula
inner join turma t on t.idturma = ti.idturmainf
where 
a.tipo_curso = '12' and -- TIPO DO CURSO
a.situacao = 'RE' and --REGULAR
t.periodo = '1' and -- 1º PERIODO
ti.mediafinal > '6.00' -- NOTA MAIOR QUE 6 QUE É A MÉDIA
GROUP BY
a.matricula
HAVING
COUNT(ti.mediafinal) = '4'

 

 

Select que me traz todos os alunos do banco que reprovaram em pelo menos 1ª matéria no 2º semestre.

 

 

select 
a.nome, 
COUNT(ti.mediafinal) as 'Md'
from 
alunos a
inner join turma_info ti on ti.matricula = a.matricula
inner join turma t on t.idturma = ti.idturmainf
where 
a.tipo_curso = '12' and -- TIPO DO CURSO
a.situacao = 'RE' and --REGULAR
t.periodo = '2' and -- 1º PERIODO
ti.mediafinal >= '6.00' -- NOTA MAIOR QUE 6 QUE É A MÉDIA
GROUP BY
a.matricula
HAVING
COUNT(ti.mediafinal) >= '1'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja se

 

select 
       t.periodo,
       a.nome, 
       COUNT(ti.mediafinal) as 'Md'
from 
       alunos a
       inner join turma_info ti on ti.matricula = a.matricula
       inner join turma t on t.idturma = ti.idturmainf
where 
       a.tipo_curso = '12' and -- TIPO DO CURSO
       a.situacao = 'RE' and --REGULAR
       ti.mediafinal > '6.00' -- NOTA MAIOR QUE 6 QUE É A MÉDIA
GROUP BY
       t.periodo,
       a.matricula
HAVING
       COUNT(ti.mediafinal) = '8'

 

Juntei os dois períodos

Compartilhar este post


Link para o post
Compartilhar em outros sites

O resultado foi vazio,

 

Estou verificando aqui também que pode ter tido alunos com Credito Concedido, Aí no caso ele teria cursado menos que 4 matérias no 1º semestre mais não teria reprovado em nenhuma matéria...

 

Esse cara entra também!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, tem como usar duas Cláusulas Exists dentro de um Where?

 

Tipo assim,

 


SELECT DISTINCT
a.matricula
FROM
alunos a
WHERE 
a.situacao = 'REGULAR' and
a.curso = '3' and -- Pós Graduação
NOT EXISTS
	(SELECT
		tp.matricula
	FROM			
		pauta tp
		inner join turma t on t.turmanum  = tp.turmanum
	WHERE
		tp.matricula = a.matricula and
		t.turma = '010' and
		t.turperiodo = '1' and
		t.turstatus = 'CR' and
		t.id_curriculo = '14' and
		tp.mediafinal < '6.00') 

-- Este trecho acima me traz todos os alunos que passaram em todas as disciplinas que cursaram NO 1º PERIODO.

-- Ai entra minha duvida eu queria fazer neste trecho abaixo, uma outra instrução pegando o resultado desta primeira.

-- E dizendo assim: do resultado dessa querie acima, quero saber se existe alguém que reprovou em pelo menos UMA matéria ou seja tp.mediafinal < '6.00' NO 2º PERIODO, 

 

 

 

 

Teria a possibilidade sendo assim de montar outro EXISTS abaixo do NOT EXISTS?..

 

Valeu obrigado pessoal

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT DISTINCT
a.matricula
FROM
alunos a
inner join pauta tp
on tp.matricula = a.matricula
inner join turma t 
on t.turmanum = tp.turmanum
WHERE
t.turma = '010' and
t.turstatus = 'CR' and
t.id_curriculo = '14' and
a.situacao = 'REGULAR' and 
a.curso = '3' and
not exists (select matricula 
from pauta tp1 
inner join turma t1 on tp1.turmanum = t.termanum 
where tp1.matricula = tp.matricula
and t1.turperiodo = '1' 
and tp1.mediafinal < 6)
and exists (select matricula 
from pauta tp1 
inner join turma t1 on tp1.turmanum = t.termanum 
where tp1.matricula = tp.matricula
and t1.turperiodo = '2' 
and tp1.mediafinal < 6)

 

com essa query, acho que traz apenas alunos que passaram direto no primeiro periodo e ficaram em alguma materia no 2o periodo

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Pessoal, consegui até que fim, rs

 

Da seguinte maneira:

 

Foi muito mais simples do que eu imaginava, eu realmente estava complicando as coisas atoa:

 

vide:

 


SELECT DISTINCT
a.matricula
FROM
alunos a
WHERE 
a.alusituac = 'RE' and -- Aluno regular
a.curcod = '110' and -- código da pós graduação
a.matricula like '101%' and -- matricula p/ quem começou a estudar a pós em 2010/1º semestre
NOT EXISTS -- Vai trazer somente os alunos que passaram em todas as disciplinas que cursaram no 1º período.
	(SELECT
		tp.matricula
	FROM			
		turma_pauta tp
		inner join turma t on t.turmanum  = tp.turmanum
	WHERE
		tp.matricula = a.matricula and
		t.turma = '010' and -- turma que começou em 2010/1
		t.turperiodo = '1' and -- 1º periodo em 2010/1
		t.turstatus = 'CR' and -- CUrsando a disciplina
		tp.mediafinal <> '0.00' and
		t.id_curriculo = '14' and -- Identificação da Pós
		tp.mediafinal < '6.00') and -- Média p/ aprovação na pós
EXISTS    -- Vai trazer somente os alunos que passaram em todas as disciplinas que cursaram no 1º período e que reprovaram apenas 1ª disciplina no 2º período.
	(SELECT
		tp.matricula
	FROM			
		turma_pauta tp
		inner join turma t on t.turmanum  = tp.turmanum
	WHERE
		tp.matricula = a.matricula and
		t.turma = '010' and -- turma que começou em 2010/1
		t.turperiodo = '2' and -- 1º periodo p/ quem começou em 2010/1
		t.turstatus = 'CR' and -- Cursando
		tp.mediafinal <> '0.00' and 
		t.id_curriculo = '14' and -- Código da turma
		tp.mediafinal < '6.00')

 

 

Valeu ai pela força pessoal,

 

obrigado pelas idéias!!!

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.