Ir para conteúdo

Arquivado

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

marcosmgomes

2 Subquery

Recommended Posts

Boa tarde a todos,

 

Antes de continuar, informo que procurei no grupo e não achei nada que pudesse me ajudar, assim, resolvi postar minha duvida.

 

Possuo 2 tabelas no meu BD e preciso realizar duas operações para que possa achar o valor que preciso.

 

Preciso retornar as pessoas que tem o salario dentro da faixa do salario medio do departamento com o salario geral (media Geral).

 

Montei a seguinte resolução.

 

Salario Médio

SELECT AVG(SALARIO) FROM FUNCIONARIO;

 

Salário Médio do Departamento.

SELECT AVG(SALARIO) FROM FUNCIONARIO F, DEP D WHERE F.NRO = D.NRO GROUP BY D.NOME;

/* NRO é FK em Funcionario e PK em Dep, assim, quando eu aplico a clausula group by eu evito o Plano Cartesiano. */

 

Até esse momento está correto.

 

Mas ai eu preciso comparar dessa forma.

 

meuSalario <= mediaDep AND meuSalario <= mediaGeral

 

Eu fiz o seguinte.

 

SELECT F.NOME, D.NOME, F.SALARIO

FROM FUNC F, DEPTO D

WHERE F.NRO_DEPTO = D.NRO_DEPTO

AND F.SALARIO <= (SELECT AVG(SALARIO) FROM FUNC, DEPTO WHERE FUNC.NRO_DEPTO = DEPTO.NRO_DEPTO)

AND F.SALARIO <= (SELECT AVG(SALARIO) FROM FUNC);

 

 

Esse comando acima está perto do que quero, mas ainda está errado, pois lista os salarios que estão maior que a mediaDep.

 

 

Obs: Quem for me ajudar, não me de a resposta, me explique o que usar e como usar.

Já tentei colocar com INNER JOIN, JOIN, BETWEEN, e ainda não achei a melhor solução.

 

Obrigado desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um problema é que a média de um setor pode ser maior ou menor que a média geral.

 

Creio que solução passe por dois testes

 

( (salfuncion between mediageral an mediasetor)

Or

(Salfuncion between mediasetorcamd mediageral) )

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.