Pular para o conteúdo principal

Questão de Banco de Dados — SQL — FGV 2025

Banco de DadosSQL
Código
fg120696
Banca
FGV
Órgão
SEFAZ-PR
Ano
2025
Nível
Superior
Cargo
Auditor Fiscal (Tarde)
Em consultas SQL que envolvem funções agregadas, é essencial compreender a sintaxe e a lógica no uso das cláusulas relevantes.Considere uma tabela chamada funcionarios, que possui os seguintes campos: id (inteiro), nome (texto), salario (numérico), e departamento (texto).Deseja-se escrever uma consulta que liste os departamentos cujo salário médio dos funcionários seja superior a 3000. Assinale a alternativa que apresenta a consulta SQL com sintaxe correta para esse caso.
  1. ASELECT departamento, AVG(salario) FROM funcionarios WHERE AVG(salario) > 3000 GROUP BY departamento;
  2. BSELECT departamento, AVG(salario) FROM funcionarios GROUP BY departamento WHERE AVG(salario) > 3000;
  3. CSELECT departamento, AVG(salario) FROM funcionarios GROUP BY AVG(salario) HAVING AVG(salario) > 3000;
  4. DSELECT departamento, AVG(salario) FROM funcionarios GROUP BY departamento HAVING AVG(salario) > 3000;
  5. ESELECT departamento, AVG(salario) FROM funcionarios HAVING AVG(salario) > 3000;
Revelar gabarito e comentário

GabaritoD — SELECT departamento, AVG(salario) FROM funcionarios GROUP BY departamento HAVING AVG(salario) > 3000;

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”.

SQL: GROUP BY e HAVING em consultas com funções agregadas

Gabarito: letra D. A consulta correta para listar departamentos com salário médio superior a 3000 é SELECT departamento, AVG(salario) FROM funcionarios GROUP BY departamento HAVING AVG(salario) > 3000;. A cláusula HAVING é a única que permite filtrar grupos após a agregação; WHERE não aceita funções agregadas diretamente.

A banca testa o conhecimento da ordem e das limitações das cláusulas SQL. A sintaxe geral é: SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY .... Funções agregadas (AVG, SUM, COUNT, etc.) não podem aparecer no WHERE porque este filtra linhas antes do agrupamento. O HAVING filtra grupos já formados.

  1. 1SELECT
  2. 2FROM
  3. 3WHERE (filtra linhas)
  4. 4GROUP BY (agrupa)
  5. 5HAVING (filtra grupos)
  6. 6ORDER BY
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Usa WHERE AVG(salario) > 3000. Funções agregadas não podem ser usadas em WHERE, pois a agregação ainda não ocorreu. O correto é usar HAVING.

Alternativa B — ❌ Incorreta

Coloca WHERE depois de GROUP BY. A ordem correta é WHERE antes de GROUP BY. Além disso, WHERE não aceita AVG.

Alternativa C — ❌ Incorreta

Agrupa por AVG(salario) (GROUP BY AVG(salario)), o que não faz sentido sintático nem lógico. GROUP BY deve listar colunas que não são agregadas, não a própria agregação.

Alternativa D — ✅ Correta ⟵ GABARITO

Segue exatamente a sintaxe correta: GROUP BY departamento para agrupar por departamento, e HAVING AVG(salario) > 3000 para filtrar os grupos que atendem à condição. A cláusula HAVING é usada após GROUP BY para aplicar condições sobre funções agregadas.

Alternativa E — ❌ Incorreta

Usa HAVING sem GROUP BY. Embora HAVING possa ser usado sem GROUP BY em alguns bancos (para filtrar uma única linha agregada), aqui a consulta pede departamentos (coluna não agregada), o que exige GROUP BY para que cada grupo de departamento seja avaliado separadamente. Sem GROUP BY, o AVG(salario) seria a média de toda a tabela, não por departamento, e a consulta retornaria apenas uma linha, não a lista de departamentos.

PEGA ESSA DICA!

Lembre-se da ordem das cláusulas: SELECTFROMWHEREGROUP BYHAVINGORDER BY. O WHERE filtra linhas antes do agrupamento; o HAVING filtra grupos depois da agregação. Se a condição envolver uma função agregada, ela deve ficar no HAVING.

Gabarito: letra D.

Link permanente: /questoes/fg120696