Questão de Banco de Dados — Consultas e Comandos em SQL — FCC 2025
Banco de Dados›Consultas 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 é:
ASELECT id_empresa, COUNT(*) AS total_fiscalizacoes FROM FISCALIZACAO WHERE status = 'Concluida' GROUP BY id_empresa;
BSELECT id_empresa, COUNT(*) AS total_fiscalizacoes, SUM(valor_multa) AS total_arrecadado FROM FISCALIZACAO WHERE status = 'Concluida' GROUP BY id_empresa;
CSELECT id_empresa, COUNT(id_fiscalizacao) AS total_fiscalizacoes, COUNT(valor_multa) AS total_arrecadado FROM FISCALIZACAO WHERE status = 'Concluida' GROUP BY id_empresa;
DSELECT id_empresa, COUNT(*) AS total_fiscalizacoes, AVG(valor_multa) AS total_arrecadado FROM FISCALIZACAO WHERE status = 'Concluida' GROUP BY id_empresa;
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.