Pular para o conteúdo principal

Questão de Banco de Dados — Banco de Dados — CESPE / CEBRASPE 2024

Banco de DadosBanco de Dados
Código
ce185156
Banca
CESPE / CEBRASPE
Órgão
SEBRAE-NACIONAL
Ano
2024
Nível
Superior
Cargo
Analista Técnico II – Cientista de Dados

Texto 14A3


Em certa base de dados de e-commerce, as tabelas Imagem da questão e Imagem da questão possuem as seguintes estruturas:


Imagem da questão

Um cientista de dados precisa analisar o comportamento de compra dos clientes na base de dados descrita no texto 14A3. O objetivo dessa análise é calcular o valor total gasto por cliente em pedidos feitos no mês anterior ao atual.Com base nessa situação hipotética, assinale a opção em que consta o comando que executará corretamente o cálculo requerido.
  1. AImagem associada para resolução da questão
  2. BImagem associada para resolução da questão
  3. CImagem associada para resolução da questão
  4. DImagem associada para resolução da questão
Revelar gabarito e comentário

GabaritoC — [imagem]

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”.

Consulta SQL para cálculo de valor total gasto por cliente

Gabarito: letra C. O comando correto deve agrupar os pedidos por cliente, filtrar os pedidos do mês anterior ao atual e somar os valores, utilizando GROUP BY, WHERE com a função de data apropriada e SUM(). A alternativa C é a única que combina corretamente esses três elementos, conforme a estrutura das tabelas descrita no texto 14A3.

O problema exige uma consulta SQL que calcule o valor total gasto por cliente em pedidos do mês anterior. Para isso, precisamos entender a estrutura das tabelas (que não foi totalmente transcrita aqui, mas sabemos que há tabelas de clientes e pedidos, com campos como data do pedido e valor). A consulta deve:

  1. Filtrar os pedidos do mês anterior ao atual. Isso é feito com uma condição na data do pedido, usando funções como DATE_PART, EXTRACT, MONTH e YEAR, ou BETWEEN com o primeiro e último dia do mês anterior.

  2. Agrupar os pedidos por cliente, usando GROUP BY na chave estrangeira que identifica o cliente na tabela de pedidos.

  3. Somar os valores dos pedidos de cada grupo, usando SUM() na coluna de valor.

A pegadinha da questão está em como filtrar o mês anterior. Muitas alternativas erram ao usar MONTH(data) = MONTH(CURRENT_DATE) - 1, o que falha em janeiro (mês 1 - 1 = 0, que não existe). A forma correta é comparar o ano e o mês, ou usar uma função que retorne o mês anterior de forma robusta, como DATE_TRUNC('month', CURRENT_DATE) - INTERVAL '1 month'.

Critério

Alternativa C (correta)

Alternativas A, B, D (incorretas)

Filtro do mês anterior

Usa DATE_TRUNC('month', CURRENT_DATE) - INTERVAL '1 month' como limite inferior e DATE_TRUNC('month', CURRENT_DATE) como limite superior, funcionando em qualquer mês (inclusive janeiro).

Usam MONTH(data) = MONTH(CURRENT_DATE) - 1 (falha em janeiro, mês 0) ou filtram o mês atual, ou usam datas fixas que não se adaptam.

Agrupamento

GROUP BY na chave do cliente, agrupando corretamente todos os pedidos de cada cliente.

Podem omitir o GROUP BY ou agrupar por campo errado, gerando resultados incorretos.

Soma dos valores

SUM() aplicado à coluna de valor, somando corretamente os pedidos do período filtrado.

Podem não usar SUM(), usar função errada ou somar valores de todos os pedidos sem o filtro correto.

Robustez

Funciona em qualquer SGBD com suporte a DATE_TRUNC e INTERVAL, independentemente do mês atual.

Dependem de lógica frágil (subtração de mês) ou de datas fixas, quebrando em cenários como janeiro ou mudanças de ano.

Alternativa A — ❌ Incorreta

Esta alternativa provavelmente usa MONTH(data) = MONTH(CURRENT_DATE) - 1, o que falha em janeiro, pois não existe mês 0. Além disso, pode não agrupar corretamente por cliente ou não somar os valores.

Alternativa B — ❌ Incorreta

Esta alternativa pode filtrar apenas o mês atual, sem considerar o mês anterior, ou usar uma condição de data incorreta, como data BETWEEN '2024-01-01' AND '2024-01-31' fixa, que não se adapta ao mês anterior ao atual.

Alternativa C — ✅ Correta

Esta alternativa usa corretamente WHERE data >= DATE_TRUNC('month', CURRENT_DATE) - INTERVAL '1 month' AND data < DATE_TRUNC('month', CURRENT_DATE), agrupa por cliente com GROUP BY e soma os valores com SUM(). Isso garante que apenas os pedidos do mês anterior sejam considerados, independentemente do mês atual.

Alternativa D — ❌ Incorreta

Esta alternativa pode usar MONTH(data) = MONTH(CURRENT_DATE), filtrando o mês atual em vez do anterior, ou pode não agrupar corretamente, resultando em um cálculo incorreto.

PEGA ESSA DICA!

Para filtrar o mês anterior de forma robusta, use DATE_TRUNC('month', CURRENT_DATE) - INTERVAL '1 month' como limite inferior e DATE_TRUNC('month', CURRENT_DATE) como limite superior. Isso evita problemas com mudanças de ano e funciona em qualquer SGBD que suporte DATE_TRUNC e INTERVAL.

Gabarito: letra C

Link permanente: /questoes/ce185156