Questão de Banco de Dados — Banco de Dados Relacionais — FGV 2026
Banco de Dados›Banco 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.
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;
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);
CSELECT NOME_DEPTOFROM DEPARTAMENTOWHERE DEPTO_ID IN (SELECT DEPTO_IDFROM FUNCIONARIOGROUP BY DEPTO_IDWHERE AVG(SALARIO) > (SELECT AVG(SALARIO) FROMFUNCIONARIO));
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);
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.
1JOIN departamento
2GROUP BY nome_depto
3AVG salário por grupo
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.