GARANTIR DESCONTO

Fórum Dúvidas com consultas no postgreSQL #27104

26/08/2009

0

Eu preciso fazer algumas consultas seguindo essas tabelas e não estou conseguindo alguém poderia me ajudar? As tabelas são essas:

FUNCIONARIO ([u:e143523a4d]matricula[/u:e143523a4d](pk), nome_func, anos_servico, salario, cod_orgao(fk))
ORGAO ([u:e143523a4d]cod_orgao[/u:e143523a4d](pk), nome_orgao)
DEPARTAMENTO (cod_depto(pk), localizacao)
DIVISAO ([u:e143523a4d]cod_div[/u:e143523a4d](pk))
SUBORDINADO ([u:e143523a4d]cod_depto, cod_div[/u:e143523a4d](pk composta))
GERENCIA ([u:e143523a4d]mat_ger, cod_orgao[/u:e143523a4d](pk composta))
FUNC_COMUM ([u:e143523a4d]mat_func[/u:e143523a4d](pk), cargo)
PROJETO ([u:e143523a4d]cod_proj[/u:e143523a4d](PK), nome_proj, inicio, fim)
ALOCA ([u:e143523a4d]cod_proj, mat_func[/u:e143523a4d](pk composta), data_alocacao)
COORDENA ([u:e143523a4d]cod_projeto, mat_coord[/u:e143523a4d](pk composta), data_alocacao)
SUPERVISIONA ([u:e143523a4d]mat_superior, mat_func[/u:e143523a4d](pk composta))
PROJ_TECNICO ([u:e143523a4d]cod_proj[/u:e143523a4d](pk), area_pesquisa)


E eu preciso fazer as seguintes consultas:

Descubra qual a média de ganhos totais e quantos empregados são considerados para cálculo dessa média.


Liste o menor, o maior e a média de salários de cada departamento que possua
salário médio superior a R$ 1.000,00.


Liste o salário médio dos empregados por departamento e local para grupos de mais
de um empregado.


Liste a matrícula, o nome e o salário dos funcionários que ganham salário superior os do seu respectivo gerente.


Liste a matrícula e o nome do gerente do funcionário de cargo (aux. administrativo) que ganha o maior salário.


Liste a matrícula e o nome do funcionário de cargo (Auxiliar Administrativo) que ganha o maior salário. Liste também o nome do seu gerente.


Se puderem ajudar com pelo menos uma dessas ficarei muito grato.

Abraços.[/u]


Renancrc

Renancrc

Responder

Posts

26/08/2009

Emerson Nascimento

como essas tabelas são relacionadas ?

todos os campos e tabelas necessárias estão listadas ?

como, a partir de um funcionário, você encontra o cargo, e em qual tabela está informado esse cargo ?


Responder

Gostei + 0

26/08/2009

Renancrc

como essas tabelas são relacionadas ?

[img:c07bec0fe3]http://img200.imageshack.us/img200/7314/classdiagram0.jpg[/img:c07bec0fe3]

todos os campos e tabelas necessárias estão listadas ?


[b:c07bec0fe3]Sim todos campos e tabelas necessárias estçao listadas.

como, a partir de um funcionário, você encontra o cargo, e em qual tabela está informado esse cargo ?

Esse cargo está informado na tabela Funcionário Comum vendo o diagrama acho que fica mais fácil obrigado a ajuda.

:)


[/b:c07bec0fe3]


Responder

Gostei + 0

27/08/2009

Emerson Nascimento

mesmo avaliando seu diagrama não consegui entender como, a partir da tabela de funcionários, chego na tabela departamentos, para poder atender à segunda questão

[img:a5213f7de9]http://img190.imageshack.us/img190/5029/relationb.jpg[/img:a5213f7de9]


Responder

Gostei + 0

27/08/2009

Renancrc

caro Emerson, a tabela Funcionário gerência um órgão na qual é a classe mãe de Departamento, então para conseguir chegar na classe Departamento é através da classe órgão.

Obrigado mais uma vez mas se mesmo assim não conseguiu entender você poderia me ajudar nas outras que estão mais claras?

Obrigado


Responder

Gostei + 0

27/08/2009

Emerson Nascimento

deve ser algo assim:

[b:d6ad9c530b]Descubra qual a média de ganhos totais e quantos empregados são considerados para cálculo dessa média.[/b:d6ad9c530b]
SELECT
  Avg(SALARIO) AS MEDIA, Count(*) AS NUM_FUNCIONARIOS
FROM
  FUNCIONARIO



[b:d6ad9c530b]Liste o menor, o maior e a média de salários de cada departamento que possua
salário médio superior a R$ 1.000,00.[/b:d6ad9c530b]
SELECT
  Min(SALARIO) AS MENOR_SALARIO, Max(SALARIO) AS MAIOR_SALARIO, AVG(SALARIO) AS MEDIA, DEPTO
FROM
  FUNCIONARIO
LEFT JOIN
  [ENCONTRE O DEPARTAMENTO DO FUNCIONARIO]
GROUP BY
  DEPTO
HAVING AVG(SALARIO) > 1000



[b:d6ad9c530b]Liste o salário médio dos empregados por departamento e local para grupos de mais de um empregado.[/b:d6ad9c530b]
SELECT
  AVG(SALARIO) AS MEDIA, DEPTO, LOCAL, COUNT(*) AS NUM_FUNCIONARIOS
FROM
  FUNCIONARIO
LEFT JOIN
  [ENCONTRE O DEPARTAMENTO DO FUNCIONARIO]
GROUP BY
  DEPTO, LOCAL
HAVING COUNT(*) > 1



[b:d6ad9c530b]Liste a matrícula, o nome e o salário dos funcionários que ganham salário superior os do seu respectivo gerente.[/b:d6ad9c530b]
SELECT
  FUNCIONARIO.matricula, FUNCIONARIO.nome_func, FUNCIONARIO.salario
FROM
  FUNCIONARIO
INNER JOIN GERENCIA
  ON (Gerencia.cod_orgao = Funcionario.cod_orgao)
INNER JOIN Funcionario AS Gerente
  ON (Gerente.matricula = Gerencia.mat_ger)
WHERE
  FUNCIONARIO.Salario > Gerente.Salario



[b:d6ad9c530b]Liste a matrícula e o nome do gerente do funcionário de cargo (aux. administrativo) que ganha o maior salário.[/b:d6ad9c530b]
SELECT
  Gerente.matricula, Gerente.nome_func AS nome_gerente
FROM
  FUNCIONARIO
INNER JOIN FUNC_COMUM
  ON (Func_comum.mat_func = Funcionario.matricula)
INNER JOIN GERENCIA
  ON (Gerencia.cod_orgao = Funcionario.cod_orgao)
INNER JOIN Funcionario AS Gerente
  ON (Gerente.matricula = Gerencia.mat_ger and Gerente.Matricula <> Funcionario.matricula)
WHERE
  Func_comum.Cargo = ´Auxiliar Administrativo´
  and Funcionario.Salario =
    (SELECT max(Fn2.Salario)
     FROM FUNCIONARIO AS Fn2
     WHERE Fn2.Cargo = ´Auxiliar Administrativo´)



[b:d6ad9c530b]Liste a matrícula e o nome do funcionário de cargo (Auxiliar Administrativo) que ganha o maior salário. Liste também o nome do seu gerente.[/b:d6ad9c530b]
SELECT
  Funcionario.matricula, Funcionario.nome_func, Gerente.nome_func AS nome_gerente
FROM
  FUNCIONARIO
INNER JOIN FUNC_COMUM
  ON (Func_comum.mat_func = Funcionario.matricula)
INNER JOIN GERENCIA
  ON (Gerencia.cod_orgao = Funcionario.cod_orgao)
INNER JOIN Funcionario AS Gerente
  ON (Gerente.matricula = Gerencia.mat_ger and Gerente.Matricula <> Funcionario.matricula)
WHERE
  Func_comum.Cargo = ´Auxiliar Administrativo´
  and Funcionario.Salario =
    (SELECT max(Fn2.Salario)
     FROM FUNCIONARIO AS Fn2
     WHERE Fn2.Cargo = ´Auxiliar Administrativo´)


essas são instruções para você dar partida no seu estudo. pode ser que não funcionem com PostGre (não trabalho com esse SGBDR), mas dá pra você ter uma idéia de como fazer.


Responder

Gostei + 0

27/08/2009

Renancrc

Muito obrigado realmente me ajudou muito estava desesperado com essas consultas.

Agora acho que já entendi e qualquer coisa que precisar estamos aí.

Abraços!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar