Dúvidas com consultas no postgreSQL

PostgreSQL

26/08/2009

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

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

26/08/2009

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 ?


GOSTEI 0
Renancrc

Renancrc

26/08/2009

como essas tabelas são relacionadas ?


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]


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

26/08/2009

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



GOSTEI 0
Renancrc

Renancrc

26/08/2009

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


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

26/08/2009

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.


GOSTEI 0
Renancrc

Renancrc

26/08/2009

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!


GOSTEI 0
POSTAR