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
fc150356
Banca
FCC
Órgão
SEFAZ PI
Ano
2025
Cargo
ATE ( )
Uma Secretaria da Fazenda mantém um banco de dados com informações sobre empresas e suas fiscalizações. A tabela FISCALIZACAO contém os campos id_fiscalizacao (PK), id_empresa, data_fiscalizacao, status e valor_multa. Em condições ideais, a consulta SQL que retorna a quantidade de fiscalizações com status Concluída e o total arrecadado com multas por empresa é:
  1. ASELECT id_empresa, COUNT(*) AS total_fiscalizacoes   FROM FISCALIZACAO WHERE status = 'Concluida' GROUP BY id_empresa;
  2. BSELECT id_empresa, COUNT(*) AS total_fiscalizacoes, SUM(valor_multa) AS total_arrecadado  FROM FISCALIZACAO WHERE status = 'Concluida' GROUP BY id_empresa;
  3. CSELECT id_empresa, COUNT(id_fiscalizacao) AS total_fiscalizacoes, COUNT(valor_multa) AS total_arrecadado   FROM FISCALIZACAO WHERE status = 'Concluida' GROUP BY id_empresa;
  4. DSELECT id_empresa, COUNT(*) AS total_fiscalizacoes, AVG(valor_multa) AS total_arrecadado   FROM FISCALIZACAO WHERE status = 'Concluida' GROUP BY id_empresa;
  5. ESELECT id_empresa, COUNT(DISTINCT id_fiscalizacao) AS total_fiscalizacoes,  COUNT(valor_multa) AS total_arrecadado   FROM FISCALIZACAO WHERE status = 'Concluida' GROUP BY id_empresa;
Revelar gabarito e comentário

GabaritoB — SELECT id_empresa, COUNT(*) AS total_fiscalizacoes, SUM(valor_multa) AS total_arrecadado  FROM FISCALIZACAO WHERE status = 'Concluida' GROUP BY id_empresa;

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: funções de agregação e agrupamento

Gabarito: letra B. A consulta correta deve contar as fiscalizações concluídas por empresa (COUNT(*)) e somar os valores das multas (SUM(valor_multa)), agrupando por id_empresa — exatamente o que a alternativa B faz. As demais alternativas erram ao usar funções inadequadas (AVG, COUNT no lugar de SUM) ou ao omitir a soma das multas.

A questão cobra o uso de funções de agregação do SQL, que resumem várias linhas em um único valor. As principais são COUNT (conta linhas), SUM (soma valores numéricos), AVG (média), MAX e MIN. Quando combinadas com GROUP BY, essas funções são aplicadas a cada grupo de linhas definido pela coluna agrupada. No caso, queremos um resultado por empresa, então agrupamos por id_empresa e, para cada grupo, contamos as linhas e somamos os valores da coluna valor_multa.

A cláusula WHERE status = 'Concluida' filtra as linhas antes do agrupamento, garantindo que apenas fiscalizações concluídas entrem no cálculo. Essa ordem é fundamental: primeiro filtra, depois agrupa, depois agrega. Se o filtro fosse feito com HAVING (que age após o agrupamento), o resultado seria diferente.

A pegadinha da banca está em trocar SUM por COUNT ou AVG na coluna de multas. COUNT(valor_multa) conta quantas multas existem, não o total arrecadado; AVG(valor_multa) calcula a média, não a soma. A alternativa B é a única que usa a função correta para somar valores.

Guarde a distinção: COUNT conta linhas, SUM soma valores, AVG calcula média. É exatamente nessa fronteira que as alternativas se dividem.

Critério

Alternativa B (correta)

Alternativa C

Alternativa D

Alternativa E

Contagem de fiscalizações

COUNT(*) — conta todas as linhas do grupo

COUNT(id_fiscalizacao) — correto, mas redundante

COUNT(*) — correto

COUNT(DISTINCT id_fiscalizacao) — desnecessário (PK já é única)

Total arrecadado com multas

SUM(valor_multa) — soma corretamente os valores

COUNT(valor_multa) — conta multas, não soma

AVG(valor_multa) — calcula média, não soma

COUNT(valor_multa) — conta multas, não soma

Função de agregação usada para multas

SUM (soma) ✅

COUNT (contagem) ❌

AVG (média) ❌

COUNT (contagem) ❌

Atende ao enunciado (quantidade + total arrecadado)

Sim, integralmente ✅

Não — não soma valores

Não — não soma valores

Não — não soma valores

Alternativa A — ❌ Incorreta

Falta a soma das multas. A consulta conta as fiscalizações concluídas por empresa, mas não retorna o total arrecadado com multas, que é parte do que o enunciado pede. O SUM(valor_multa) está ausente.

Alternativa B — ✅ Correta ⟵ GABARITO

Usa COUNT(*) para contar as fiscalizações concluídas e SUM(valor_multa) para somar os valores das multas, agrupando por id_empresa. O WHERE status = 'Concluida' filtra corretamente antes do agrupamento. É a única alternativa que atende integralmente ao pedido.

Alternativa C — ❌ Incorreta

Usa COUNT(valor_multa) para o total arrecadado. Isso conta quantas multas existem, não a soma dos valores. Para somar, o correto é SUM(valor_multa). O COUNT(id_fiscalizacao) para o total de fiscalizações até funcionaria, mas a segunda coluna está errada.

Alternativa D — ❌ Incorreta

Usa AVG(valor_multa) para o total arrecadado. Isso calcula a média das multas, não a soma. O total arrecadado exige SUM, não AVG.

Alternativa E — ❌ Incorreta

Repete o erro da alternativa C: COUNT(valor_multa) conta multas em vez de somá-las. Além disso, COUNT(DISTINCT id_fiscalizacao) é desnecessário, pois id_fiscalizacao é chave primária e já é único — COUNT(*) ou COUNT(id_fiscalizacao) dariam o mesmo resultado.

PEGA ESSA DICA!

Na hora da prova, identifique o que cada função de agregação retorna: COUNT conta linhas, SUM soma valores numéricos, AVG calcula a média. Quando o enunciado pedir "total arrecadado", "soma", "valor total", use SUM. Quando pedir "quantidade", "número de", use COUNT. Essa distinção elimina rapidamente alternativas erradas.

Gabarito: letra B

Link permanente: /questoes/fc150356