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.
ASELECT departamento, AVG(salario) FROM funcionarios WHERE AVG(salario) > 3000 GROUP BY departamento;
BSELECT departamento, AVG(salario) FROM funcionarios GROUP BY departamento WHERE AVG(salario) > 3000;
CSELECT departamento, AVG(salario) FROM funcionarios GROUP BY AVG(salario) HAVING AVG(salario) > 3000;
DSELECT departamento, AVG(salario) FROM funcionarios GROUP BY departamento HAVING AVG(salario) > 3000;
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.
1SELECT
2FROM
3WHERE (filtra linhas)
4GROUP BY (agrupa)
5HAVING (filtra grupos)
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: SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER 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.