Uma consultoria tributária mantém um banco de dados com a ta...
idempresa (INT): Identificador único da empresa
nome_empresa (VARCHAR): Nome da empresa
valor imposto (DECIMAL.): Valor do imposto pago
data pagamento (DATE): Data do pagamento (formato padrão ISO (YYYY-MM-DD))
categoria (VARCHAR): Categoria do imposto (exemplo: "ICMS", "ISS", "IPI")
Ο contador precisa de um relatório que mostre o total de impostos pagos por categoria em 2024, ordenado pelo valor total de forma decrescente. Considerando que o banco de dados está aberto e em condições ideais, o comando SQL que atende a necessidade do contador é:
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: E
Tema central da questão: A questão aborda o uso de comandos SQL para agrupamento (GROUP BY), funções de agregação (SUM), filtros com datas (WHERE) e ordenação (ORDER BY) para gerar relatórios em bancos de dados relacionais. Esse conhecimento é essencial em concursos públicos para carreiras de TI, pois permite manipular e extrair informações úteis dos dados armazenados.
Resumo teórico:
- GROUP BY: agrupa linhas que possuem o mesmo valor em uma ou mais colunas.
- SUM(): soma valores de uma coluna para cada grupo definido por GROUP BY.
- WHERE: filtra linhas conforme a condição especificada.
- ORDER BY: ordena o resultado.
- LIKE '2024%' em datas no formato 'YYYY-MM-DD' seleciona todos os registros de 2024.
Fonte: Fundamentos de Sistemas de Banco de Dados, Elmasri & Navathe.
Justificativa da alternativa correta (E):
SELECT categoria, SUM(valor_imposto) FROM impostos WHERE data_pagamento LIKE '2024%' GROUP BY categoria ORDER BY SUM(valor_imposto) DESC;
Esta alternativa filtra corretamente os registros de 2024 usando o LIKE, agrupa por categoria, soma os valores dos impostos e ordena do maior para o menor. Tudo exatamente como solicitado.
Análise das alternativas incorretas:
- A: Usa COUNT, que retorna a quantidade de lançamentos, não o valor total. O comando não soma os valores dos impostos.
- B: Usa AVG (média), quando a questão pede o total (soma). O filtro está correto, mas a função agregadora está errada.
- C: Falta o GROUP BY, essencial para agrupar por categoria. Além disso, o ORDER BY está incompleto e ordena pela coluna errada.
- D: Compara a data completa com '2024', o que nunca será verdadeiro, pois o campo armazena datas como 'YYYY-MM-DD'.
Dica para a prova: Sempre observe se a função agregadora e o filtro de datas correspondem exatamente ao que o enunciado pede. Pegadinhas comuns incluem confundir COUNT com SUM, AVG com SUM e usar filtros de datas incompatíveis com o formato da coluna.
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
Tem duas formas rápidas de resolver analisando as respostas:
1) No enunciado pede Um relatório que mostre o total de impostos(opa vai rolar um sum) pagos por categoria em 2024 (Where), ordenado pelo valor total de forma decrescente(Desc).
Exclui as opções que não tem isso A e B(count e média), veja que no enunciado ele já descreve o tipo da data Data do pagamento (formato padrão ISO (YYYY-MM-DD), ou seja, mata a letra C e D, porque colocaram o tipo INT e String. Restando somente a E, fez sentido pra você?
2) Já ir direto analisando o tipo da data e resta somente as opções B e E, sendo que a letra B está tirando a média(avg), restando somente a letra E.
De cara já eliminei as alternativas (A) e (B):
A) Usa COUNT() (contar o número de pagamentos) e não SUM() (somar o valor dos pagamentos). O pedido era o total de valores pagos.
B) Usa AVG() (média dos valores pagos) e não SUM() (somar o valor dos pagamentos). O pedido era o total de valores pagos.
As demais:
C) Faltou a cláusula GROUP BY, que é essencial para que o SUM() funcione separadamente para cada categoria. Além disso, a ordenação está incorreta (deveria ser ORDER BY).
D) O filtro WHERE data_pagamento = '2024' é incorreto, pois procuraria uma data exata igual a '2024', o que não corresponde ao formato YYYY-MM-DD e não traria nenhum resultado válido.
E)
SELECT categoria, SUM(valor_imposto)
FROM impostos
WHERE data_pagamento LIKE'2024%'
GROUPBY categoria
ORDER BY SUM(valor_imposto) DESC;
"Total de impostos": Usa SUM(...) (soma), e não COUNT (contagem) ou AVG (média).
"Por categoria": Usa GROUP BY categoria para separar a soma de cada tipo de imposto.
"Em 2024": Usa WHERE ... LIKE '2024%'. Como a data é YYYY-MM-DD, qualquer coisa que comece com "2024" é filtrada corretamente.
"Ordem decrescente": Usa ORDER BY ... DESC para colocar os maiores valores no topo.
A função YEAR(data_pagamento) = 2024 (presente em A e C) também é uma forma correta e frequentemente mais segura, mas a sintaxe com LIKE é válida e está presente na opção correta (E).
Não sabia que dava pra usar LIKE em um tipo date, mas deu pra acertar eliminando todas as outras porque tinham erros evidentes.
Por que usar o LIKE com % em datas?
- Captura o Ano Inteiro: Como as datas no banco de dados geralmente estão no formato AAAA-MM-DD (ex: 2024-05-20), o filtro '2024%' garante que você pegue desde o dia 1º de janeiro até o dia 31 de dezembro de 2024.
- Ignora a Precisão do Tempo: Se a coluna data_pagamento for do tipo DATETIME (que inclui horas, minutos e segundos), o % ignora toda essa parte final e foca apenas no início da string.
- Simplicidade: É uma forma rápida de filtrar um período sem precisar usar funções mais complexas como YEAR(data_pagamento) = 2024.
O "LIKE" é um operador que atua no refinamento na busca dos dados. Ele auxilia o Where nas consultas. Dessa forma, o "LIKE" 2024% indica que há varios caracteres após o ano de 2024, pois sem o LIKE a pesquisa seria mais longa e possivelmente incorreta.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo