Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida em Query


Facó

Pergunta

Olá amigos, sou estudante de computação cursando no momento a disciplina de Fundamentos de Banco de Dados.

Acabei de sair de uma prova onde não consegui fazer uma questão e fiquei encucado. Gostaria da ajuda de vocês.

A questão é:

"Listar nome dos empregados que ganham salario maior que a media dos salarios de todas as divisões de seus departamentos"

Alguns dados importantes sobre o banco da prova:

- Todo Empregado está lotado em 1 departamento e em 1 divisão.

- Cada departamento pode ter N divisões.

- O salario do empregado é um atributo calculado, existe a tabela "Venc_Emp" que é uma tabela auxiliar contendo a matr do empregado, e o cod do vencimento. Na tabela vencimento há o valor do mesmo. Há tambem a tabela "Desc_Emp" que é outra tabela auxiliar tambem contendo matr do empregado e cod do Desconto. Na tabela desconto há o valor do mesmo.

Ou seja o salario do empregado é a soma do valor, de todos os vencimentos dele menos a soma do valor de todos os descontos dele.

Fiz uma busca no fórum e não achei nada parecido, até porque me parece ser algo bem especifico.

Espero que vocês possam me ajudar amigos! Abraços.

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Boa tarde Amigo.

É.... questão muito boa esta.... rs.

A pesquisa deveria ser realizada utilizando apenas 1 select?

Não coloquei as tabelas departamento e divisão. Como o resultado é os empregados de todas as divisões, não achei necessário. Mas basta realizar o join com estas tabelas no script, ok?

Coloquei um exemplo do script logo abaixo:

Execute o script passo a passo. Coloquei alguns comentários no script. Espero q tire suas dúvidas. :.)

-- Criação de temporárias

create table #Venc_Emp (matr int, codVencimento int)

create table #vencimento (codVencimento int, valor int)

create table #Desc_Emp (matr int, codDesconto int)

create table #desconto (codDesconto int, valor int)

-- Inserção dos dados

insert into #Venc_Emp values (13245, 1)

insert into #Venc_Emp values (132, 2)

insert into #vencimento values (1, 600)

insert into #vencimento values (2, 800)

insert into #Desc_Emp values (13245, 5)

insert into #Desc_Emp values (132, 6)

insert into #desconto values (5, 10)

insert into #desconto values (6, 30)

select * from #Venc_Emp

select * from #vencimento

select * from #Desc_Emp

select * from #desconto

-- Soma dos vencimentos e soma dos descontos

select sum(v.valor) as Vencimentos, sum(d.valor) as Descontos

from #Venc_Emp ve, #vencimento v, #Desc_Emp de, #desconto d

where ve.matr=de.matr and ve.codVencimento=v.codVencimento and de.codDesconto=d.codDesconto

-- Média dos valores salarias.

select (sum(v.valor) - sum(d.valor)) / (select count(matr) from #Venc_Emp) as Media

from #Venc_Emp ve, #vencimento v, #Desc_Emp de, #desconto d

where ve.matr=de.matr and ve.codVencimento=v.codVencimento and de.codDesconto=d.codDesconto

-- Salario dos empregados.

select ve.matr, (sum (v.valor) - sum(d.valor)) as Salario

from #Venc_Emp ve, #vencimento v, #Desc_Emp de, #desconto d

where ve.matr=de.matr and ve.codVencimento=v.codVencimento and de.codDesconto=d.codDesconto

group by ve.matr

-- Resultado da pesquisa, sendo realizada em um select.

-- Peguei o select "Salario dos empregados" e depois do comando having, coloquei o select "Média dos valores salarias"

select ve.matr

from #Venc_Emp ve, #vencimento v, #Desc_Emp de, #desconto d

where ve.matr=de.matr and ve.codVencimento=v.codVencimento and de.codDesconto=d.codDesconto

group by ve.matr

having (sum (v.valor) - sum(d.valor)) > (select (sum(v.valor) - sum(d.valor)) / (select count(matr) from #Venc_Emp)

from #Venc_Emp ve, #vencimento v, #Desc_Emp de, #desconto d

where ve.matr=de.matr and ve.codVencimento=v.codVencimento and de.codDesconto=d.codDesconto)

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...