Uma Secretaria da Fazenda mantém um banco de dados com infor...
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