Dúvidas com consultas no postgreSQL
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]
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
Curtidas 0
Respostas
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 ?
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
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]
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
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
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
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
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]
[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]
[b:d6ad9c530b]Liste o salário médio dos empregados por departamento e local para grupos de mais de um empregado.[/b:d6ad9c530b]
[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]
[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]
[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]
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.
[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
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!
Agora acho que já entendi e qualquer coisa que precisar estamos aí.
Abraços!
GOSTEI 0