Questão de Banco de Dados — Consultas e Comandos em SQL — FCC 2025
Banco de Dados›Consultas e Comandos em SQL
Código
fc150351
Banca
FCC
Órgão
SEFAZ PI
Ano
2025
Cargo
Ag Trib ( )
Uma Secretaria da Fazenda mantém um banco de dados com informações sobre estabelecimentos comerciais. A tabela Estabelecimentos possui as colunas: id (identificador único); nome (nome do estabelecimento); cidade (cidade onde está localizado); tipo (categoria do estabelecimento, como 'Transportadora', 'Supermercado' etc.); faturamento_mensal (valor do faturamento no mês). É necessário que seja gerado um relatório que exiba a cidade e o faturamento médio das Transportadoras, agrupando os resultados por cidade. A consulta SQL que atende corretamente esta demanda é:
ASELECT cidade, AVG(faturamento_mensal) FROM Estabelecimentos GROUP BY cidade HAVING tipo = 'Transportadora';
BSELECT cidade, AVG(faturamento_mensal) FROM Estabelecimentos WHERE tipo = 'Transportadora';
CSELECT cidade, COUNT(faturamento_mensal) FROM Estabelecimentos WHERE tipo = 'Transportadora' GROUP BY cidade;
DSELECT cidade, AVG(faturamento_mensal) AS faturamento_medio FROM Estabelecimentos WHERE tipo = 'Transportadora' GROUP BY cidade;
ESELECT cidade, SUM(faturamento_mensal) FROM Estabelecimentos WHERE tipo = 'Transportadora' GROUP BY tipo;
Revelar gabarito e comentário▾
GabaritoD — SELECT cidade, AVG(faturamento_mensal) AS faturamento_medio
FROM Estabelecimentos WHERE tipo = 'Transportadora' GROUP BY cidade;
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”.
Consultas SQL: funções de agregação, filtros e agrupamento
Gabarito: letra D. A consulta correta usa AVG(faturamento_mensal) para calcular a média, filtra apenas as Transportadoras com WHERE tipo = 'Transportadora' e agrupa os resultados por cidade com GROUP BY cidade. A alternativa D é a única que combina todos esses elementos corretamente.
A questão cobra o entendimento de três cláusulas SQL que trabalham juntas: WHERE, GROUP BY e funções de agregação. A função AVG calcula a média aritmética dos valores de uma coluna. O WHERE filtra as linhas antes do agrupamento, selecionando apenas os registros que atendem à condição. O GROUP BY agrupa as linhas restantes por um ou mais campos, permitindo que a função de agregação seja aplicada a cada grupo separadamente.
A ordem lógica de execução é: primeiro o FROM identifica a tabela, depois o WHERE filtra as linhas, em seguida o GROUP BY agrupa as linhas filtradas e, por fim, a função de agregação é calculada para cada grupo. O HAVING é usado para filtrar grupos após o agrupamento, diferente do WHERE que filtra linhas antes do agrupamento.
Vamos analisar cada alternativa:
Consulta SQL
1Cláusulas
WHERE
filtra linhas antes do agrupamento
GROUP BY
agrupa linhas por campo
HAVING
filtra grupos após agrupamento
Funções de agregação
AVG → média
COUNT → contagem
SUM → soma
2Ordem lógica
FROM → WHERE → GROUP BY → agregação
3Consulta correta
SELECT cidade, AVG(faturamento_mensal)
WHERE tipo = 'Transportadora'
GROUP BY cidade
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
O erro está no uso do HAVING para filtrar as Transportadoras. O HAVING é aplicado depois do agrupamento, sobre os grupos formados. Como o GROUP BY cidade agrupa por cidade, o HAVING tipo = 'Transportadora' tentaria filtrar os grupos pela coluna tipo, que não está no GROUP BY nem é uma função de agregação. Isso resultaria em erro ou em um resultado incorreto. O filtro por tipo deve ser feito com WHERE, antes do agrupamento.
Alternativa B — ❌ Incorreta
Falta a cláusula GROUP BY cidade. Sem ela, a consulta retornaria apenas uma linha com a média de todas as Transportadoras, sem separar por cidade. O enunciado pede explicitamente o agrupamento por cidade.
Alternativa C — ❌ Incorreta
Usa COUNT(faturamento_mensal) em vez de AVG(faturamento_mensal). O COUNT conta o número de registros, não calcula a média. O relatório pede o faturamento médio, portanto a função correta é AVG.
Alternativa D — ✅ Correta ⟵ GABARITO
Esta é a consulta correta. Ela seleciona a cidade e a média do faturamento mensal, filtra apenas as Transportadoras com WHERE, agrupa por cidade com GROUP BY e ainda dá um alias AS faturamento_medio para a coluna calculada, tornando o resultado mais legível.
Alternativa E — ❌ Incorreta
Usa SUM(faturamento_mensal) em vez de AVG, e agrupa por tipo em vez de cidade. O SUM soma os valores, não calcula a média. Além disso, como o WHERE já filtra apenas Transportadoras, agrupar por tipo não faz sentido — todos os registros seriam do mesmo tipo, resultando em um único grupo.