Uma Secretaria da Fazenda mantém um banco de dados com infor...

Próximas questões
Com base no mesmo assunto
Q3507093 Banco de Dados
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 fiscalização, 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 é: 
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa correta: B

Tema central: A questão aborda a escrita de consultas SQL para agregação de dados em bancos relacionais, com foco no uso das funções COUNT e SUM para gerar relatórios por grupo (empresa), filtrando registros por condição (“status = 'Concluída'”). Este é um tema frequente em concursos públicos, pois demonstra domínio na manipulação e análise de dados.

Resumo teórico: Em SQL, usamos GROUP BY para agrupar os resultados por um ou mais campos. Funções de agregação como COUNT() (conta registros) e SUM() (soma valores) são empregadas para gerar totais por grupo. O WHERE é utilizado para filtrar linhas antes da agregação. Exemplo prático:

SELECT id_empresa, COUNT(*), SUM(valor_multa) FROM FISCALIZACAO WHERE status = 'Concluída' GROUP BY id_empresa;

Justificativa da alternativa B:

A alternativa B apresenta:

  • SELECT id_empresa: agrupa por empresa;
  • COUNT(*) AS total_fiscalizacoes: conta todas as fiscalizações concluídas de cada empresa;
  • SUM(valor_multa) AS total_arrecadado: soma os valores das multas aplicadas;
  • WHERE status = 'Concluída': filtra somente fiscalizações concluídas;
  • GROUP BY id_empresa: agrega os resultados por empresa.

Esse é o padrão recomendado por livros como “Fundamentos de Sistemas de Banco de Dados” (Elmasri & Navathe).

Análise das alternativas incorretas:

  • A: Não calcula o total arrecadado, omitindo a soma de multas.
  • C: Usa COUNT(valor_multa) (conta não nulos) em vez de somar valores, e contém erro no nome da tabela (“FISCALIZACAC”).
  • D: Utiliza AVG(valor_multa) (média) em vez de SUM, que não atende ao objetivo da questão.
  • E: COUNT(DISTINCT id_fiscalizacao) é redundante, e COUNT(valor_multa) conta registros, não soma valores. Além disso, há erros de sintaxe nos nomes dos campos.

Dicas para interpretar enunciados:

  • Leia atentamente o que se pede: quantidade (COUNT) e total (SUM).
  • Fique atento à função de agregação correta: somar valores é SUM(), não COUNT ou AVG.
  • Verifique nomes de campos e condições com atenção para evitar distrações ou pegadinhas.

Gostou do comentário? Deixe sua avaliação aqui embaixo!

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

A resposta correta é a **B**.

```sql

SELECT id_empresa, COUNT(*) AS total_fiscalizacoes, SUM(valor_multa) AS total_arrecadado

FROM FISCALIZACAO

WHERE status = 'Concluida'

GROUP BY id_empresa;

```

### Análise da Consulta

Vamos analisar cada parte da consulta para entender por que ela é a correta:

 * **`SELECT id_empresa, COUNT(*) AS total_fiscalizacoes, SUM(valor_multa) AS total_arrecadado`**:

   * `id_empresa`: Seleciona a coluna para agrupar os resultados.

   * `COUNT(*) AS total_fiscalizacoes`: A função `COUNT(*)` é usada para contar todas as linhas de cada grupo, que neste caso corresponde ao número de fiscalizações por empresa. O `AS` cria um alias para a coluna, tornando-a mais legível.

   * `SUM(valor_multa) AS total_arrecadado`: A função `SUM()` é usada para somar os valores da coluna `valor_multa` para cada grupo de empresa, retornando o total arrecadado. O `AS` também cria um alias aqui.

 * **`FROM FISCALIZACAO`**: Indica que a consulta será executada na tabela `FISCALIZACAO`.

 * **`WHERE status = 'Concluida'`**:

   * Esta cláusula é crucial. Ela filtra as linhas **antes** de serem agrupadas, garantindo que apenas as fiscalizações com o `status` de 'Concluída' sejam consideradas na contagem e na soma.

 * **`GROUP BY id_empresa`**:

   * Esta cláusula agrupa as linhas pelo `id_empresa`. Isso faz com que as funções de agregação (`COUNT` e `SUM`) sejam aplicadas a cada empresa individualmente, e não a toda a tabela.

-----

### Por que as outras opções estão incorretas?

 * **A**: Retorna apenas a contagem de fiscalizações, mas não o total arrecadado com as multas.

 * **C**: Utiliza `COUNT(valor_multa)` para o total arrecadado. `COUNT()` apenas conta o número de linhas não nulas, não soma os valores.

 * **D**: Utiliza `AVG(valor_multa)`, que calcularia a média do valor das multas, e não o total arrecadado.

 * **E**: Utiliza `COUNT(valor_multa)`, que novamente está incorreto para somar valores. O `DISTINCT` também é desnecessário aqui, já que `id_fiscalizacao` é uma chave primária e não haverá duplicatas.

A alternativa correta tem campos da consulta escritos sem snake_case isso é permitido nos bancos de dados ou foi erro de digitação?

acertei a primeira questão de groupby hahah

a ausência de _ complica a interpretação das alternativas ein

Quando a banca pedir TOTAL de alguma coisa ou DIFERENÇA entre RECEITA (+) e DESPESA (-): Faça a SUM (soma)

AS: dar um nome "x" ao valor retornado

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo