Pular para o conteúdo principal

Questão de Banco de Dados — Banco de Dados Relacionais — FGV 2026

Banco de DadosBanco de Dados Relacionais
Código
fg127375
Banca
FGV
Órgão
AL-RO
Ano
2026
Nível
Superior
Cargo
Analista Legislativo (Tecnologia da Informação - Banco de Dados)
Considere as tabelas FUNCIONARIO (ID, NOME, DEPTO_ID, SALARIO) e DEPARTAMENTO (DEPTO_ID, NOME_DEPTO).Um analista de BI deseja obter os nomes de todos os departamentos cuja média salarial dos funcionários é superior à média salarial de todos os funcionários da empresa.Assinale a opção que apresenta o comando SQL capaz de atender a essa requisição de forma mais concisa.
  1. ASELECT T2.NOME_DEPTOFROM FUNCIONARIO T1 JOIN DEPARTAMENTO T2 ONT1.DEPTO_ID = T2.DEPTO_IDWHERE T1.SALARIO > (SELECT AVG(SALARIO) FROMFUNCIONARIO)GROUP BY T2.NOME_DEPTO;
  2. BSELECT T2.NOME_DEPTOFROM FUNCIONARIO T1 JOIN DEPARTAMENTO T2 ONT1.DEPTO_ID = T2.DEPTO_IDGROUP BY T2.NOME_DEPTOHAVING AVG(T1.SALARIO) > (SELECT AVG(SALARIO) FROMFUNCIONARIO);
  3. CSELECT NOME_DEPTOFROM DEPARTAMENTOWHERE DEPTO_ID IN (SELECT DEPTO_IDFROM FUNCIONARIOGROUP BY DEPTO_IDWHERE AVG(SALARIO) > (SELECT AVG(SALARIO) FROMFUNCIONARIO));
  4. DSELECT T2.NOME_DEPTOFROM FUNCIONARIO T1 JOIN DEPARTAMENTO T2 ONT1.DEPTO_ID = T2.DEPTO_IDWHERE T1.SALARIO > ALL (SELECT AVG(SALARIO) FROMFUNCIONARIO GROUP BY DEPTO_ID);
  5. ESELECT T2.NOME_DEPTOFROM FUNCIONARIO T1 JOIN DEPARTAMENTO T2 ONT1.DEPTO_ID = T2.DEPTO_IDGROUP BY T2.NOME_DEPTOORDER BY AVG(T1.SALARIO) DESC;
Revelar gabarito e comentário

GabaritoB — SELECT T2.NOME_DEPTO FROM FUNCIONARIO T1 JOIN DEPARTAMENTO T2 ON T1.DEPTO_ID = T2.DEPTO_ID GROUP BY T2.NOME_DEPTO HAVING AVG(T1.SALARIO) > (SELECT AVG(SALARIO) FROM FUNCIONARIO);

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Consulta SQL com agregação e HAVING

Gabarito: letra B. A consulta utiliza GROUP BY para agrupar os funcionários por departamento e a cláusula HAVING para filtrar grupos cuja média salarial (AVG(T1.SALARIO)) seja superior à média salarial de todos os funcionários da empresa, obtida por uma subconsulta (SELECT AVG(SALARIO) FROM FUNCIONARIO). Essa é a forma mais concisa e correta de atender à requisição.

O conteúdo de apoio explica que HAVING é usado para definir condições sobre agrupamentos com GROUP BY, como no exemplo SELECT Função, AVG(Salário) FROM Funcionário GROUP BY Função HAVING AVG(Salário) > 2000,00.

  1. 1JOIN departamento
  2. 2GROUP BY nome_depto
  3. 3AVG salário por grupo
  4. 4HAVING > subconsulta média geral
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

A cláusula WHERE T1.SALARIO > (SELECT AVG(SALARIO) FROM FUNCIONARIO) filtra individualmente os funcionários com salário acima da média geral, e não a média do departamento. Depois o GROUP BY agrupa os departamentos, mas a condição já foi aplicada sobre linhas, não sobre grupos. Portanto, retorna departamentos que contenham pelo menos um funcionário acima da média, e não aqueles cuja média departamental é superior.

Alternativa B — ✅ Correta ⟵ GABARITO

A consulta agrupa corretamente por NOME_DEPTO, calcula a média salarial de cada grupo com AVG(T1.SALARIO) e aplica a condição no HAVING, comparando essa média com a média geral da empresa via subconsulta. Apenas os departamentos cuja média é superior são retornados. Sintaxe e lógica perfeitas.

Alternativa C — ❌ Incorreta

Apresenta erro de sintaxe: a condição WHERE AVG(SALARIO) >... não é permitida, pois funções de agregação não podem ser usadas diretamente no WHERE. O correto seria usar HAVING após o GROUP BY. Além disso, a subconsulta que calcula a média geral está dentro do WHERE da subconsulta principal, o que é semanticamente inválido.

Alternativa D — ❌ Incorreta

O operador > ALL compara cada salário individual com todas as médias salariais por departamento (obtidas pela subconsulta SELECT AVG(SALARIO) FROM FUNCIONARIO GROUP BY DEPTO_ID). O resultado são funcionários cujo salário é maior que a média de cada departamento, e não departamentos cuja média supera a média geral. Não atende ao requisito.

Alternativa E — ❌ Incorreta

A consulta apenas ordena os departamentos pela média salarial decrescente (ORDER BY AVG(T1.SALARIO) DESC), mas não filtra aqueles com média superior à geral. Todos os departamentos seriam retornados.

PEGA ESSA DICA!

Lembre-se: WHERE filtra linhas antes do agrupamento; HAVING filtra grupos após o GROUP BY. Para condições sobre funções de agregação (como AVG, COUNT, SUM), use sempre HAVING.

Gabarito: letra B

Link permanente: /questoes/fg127375