← Questões de Banco de Dados

Banco de Dados · FGV · 2025

Questão comentada de Banco de Dados

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.

Gabarito: D

Quando voce usa funcoes agregadas em SQL, precisa lembrar de uma ordem basica: primeiro o banco agrupa os registros, depois ele filtra os grupos. E aqui mora a pegadinha clássica: WHERE filtra linhas antes da agregacao, enquanto HAVING filtra depois, já sobre o resultado agrupado. Por isso, se a ideia é descobrir quais departamentos têm salario medio acima de 3000, voce deve agrupar por departamento e, em seguida, aplicar a condicao ao AVG(salario) no HAVING. A consulta correta fica no estilo: SELECT departamento, AVG(salario) FROM funcionarios GROUP BY departamento HAVING AVG(salario) > 3000. Repare que o departamento aparece no SELECT porque ele está no agrupamento, e a media aparece como funcao agregada. Isso é o feijao com arroz do SQL: GROUP BY organiza, HAVING filtra grupos. O gabarito D está correto justamente porque respeita essa lógica. Se voce tentasse usar AVG(salario) no WHERE, daria problema, porque o WHERE ainda nao enxerga o resultado da agregacao. Em outras palavras: nao adianta pedir para o banco filtrar uma media antes mesmo de ele calcular a media. Esse entendimento é plenamente alinhado com a sintaxe padrao do SQL: filtros de linhas vão no WHERE e filtros de grupos vão no HAVING. Em provas, a banca costuma testar essa troca de papéis, então vale guardar a dupla: WHERE para registros, HAVING para grupos.

Continue treinando

Questões relacionadas