Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — FCC 2025

Banco de DadosConsultas 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 é:

  1. ASELECT cidade, AVG(faturamento_mensal) FROM Estabelecimentos GROUP BY cidade HAVING tipo = 'Transportadora';
  2. BSELECT cidade, AVG(faturamento_mensal) FROM Estabelecimentos WHERE tipo = 'Transportadora';
  3. CSELECT cidade, COUNT(faturamento_mensal) FROM Estabelecimentos WHERE tipo = 'Transportadora' GROUP BY cidade;
  4. DSELECT cidade, AVG(faturamento_mensal) AS faturamento_medio FROM Estabelecimentos WHERE tipo = 'Transportadora' GROUP BY cidade;
  5. 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.

Gabarito: letra D

Link permanente: /questoes/fc150351