
Vamos simular um cenário real.
Você chegou na empresa (ou no cliente) e ouviu isso aqui:
“O faturamento caiu este mês. Dá uma olhada nos dados e me diz o que aconteceu?”
Essa é a hora em que muita gente abre o SQL e começa no “vai que”.
E aí sai uma query gigante, sem direção.
O jeito profissional é outro:
👉 você investiga em etapas, como se estivesse fazendo um diagnóstico.
Abaixo está um roteiro de investigação que eu usaria e que você pode copiar.
1) Checklist rápido antes de culpar o negócio
Antes de investigar “queda”, eu confirmo se não é erro de dado.
- ☐ Mudou a definição de faturamento? (bruto vs líquido)
- ☐ Mudou o período? (mês fechado vs mês em andamento)
- ☐ Mudou o timezone / data de corte?
- ☐ Teve integração fora do ar? (pedidos faltando)
- ☐ Tem pedidos sem valor / com valor zerado?
Se você ignora isso, pode passar o dia investigando… um bug de carga.
2) Etapa 1 — Confirmar a queda e quantificar
A primeira pergunta é simples:
Caiu quanto? Em valor? Em %? Em que período?
Exemplo (mês atual vs mês anterior, dia a dia):
SELECT
p.DATA_PEDIDO,
SUM(p.VALOR_TOTAL) AS FATURAMENTO
FROM pedido p
WHERE p.DATA_PEDIDO >= '2024-01-01'
GROUP BY p.DATA_PEDIDO
ORDER BY p.DATA_PEDIDO;O que você procura aqui:
- queda gradual (tendência)
- queda brusca (evento)
- “buraco” de dias (possível erro de dado)
3) Etapa 2 — Separar o faturamento em “volume x ticket”
Queda de faturamento tem 2 causas clássicas:
- menos pedidos
- ticket médio menor
Então a pergunta vira:
O que mudou: quantidade, ticket ou os dois?
SELECT
DATE_TRUNC('month', p.DATA_PEDIDO) AS MES,
COUNT(*) AS QTD_PEDIDOS,
SUM(p.VALOR_TOTAL) AS FATURAMENTO,
AVG(p.VALOR_TOTAL) AS TICKET_MEDIO
FROM pedido p
GROUP BY DATE_TRUNC('month', p.DATA_PEDIDO)
ORDER BY MES;Leitura rápida:
- Se QTD_PEDIDOS caiu → problema de demanda/conversão/aquisição
- Se TICKET caiu → problema de mix de produto, desconto, frete, upsell
- Se os dois caíram → é um “combo” (mais sério)
Obs:
DATE_TRUNCvaria por banco, mas a ideia é essa.
4) Etapa 3 — Encontrar “onde” caiu (produto, canal, região)
Agora você quer localizar a queda.
4.1 Por categoria / produto
SELECT
i.ID_PRODUTO,
SUM(i.VALOR_ITEM) AS FATURAMENTO
FROM pedido p
JOIN item_pedido i
ON i.ID_PEDIDO = p.ID_PEDIDO
WHERE p.DATA_PEDIDO >= '2024-01-01'
GROUP BY i.ID_PRODUTO
ORDER BY FATURAMENTO DESC;O que você procura:
- top produtos caindo
- produtos que sumiram do ranking
- mudança no mix (vendendo mais barato)
4.2 Por canal (se existir)
SELECT
p.CANAL,
COUNT(*) AS QTD_PEDIDOS,
SUM(p.VALOR_TOTAL) AS FATURAMENTO
FROM pedido p
WHERE p.DATA_PEDIDO >= '2024-01-01'
GROUP BY p.CANAL
ORDER BY FATURAMENTO DESC;O que você procura:
- queda em um canal específico (ex: tráfego pago)
- mudança de canal que reduz ticket
4.3 Por região
SELECT
c.UF,
SUM(p.VALOR_TOTAL) AS FATURAMENTO
FROM pedido p
JOIN cliente c
ON c.ID_CLIENTE = p.ID_CLIENTE
WHERE p.DATA_PEDIDO >= '2024-01-01'
GROUP BY c.UF
ORDER BY FATURAMENTO DESC;5) Etapa 4 — Checar desconto, frete e cancelamento
Aqui mora muita queda “invisível”.
5.1 Aumentou desconto?
SELECT
DATE_TRUNC('month', p.DATA_PEDIDO) AS MES,
AVG(p.VALOR_DESCONTO) AS DESCONTO_MEDIO
FROM pedido p
GROUP BY DATE_TRUNC('month', p.DATA_PEDIDO)
ORDER BY MES;5.2 Aumentou cancelamento?
SELECT
DATE_TRUNC('month', p.DATA_PEDIDO) AS MES,
COUNT(*) AS QTD_PEDIDOS,
SUM(CASE WHEN p.CANCELADO = 1 THEN 1 ELSE 0 END) AS QTD_CANCELADOS
FROM pedido p
GROUP BY DATE_TRUNC('month', p.DATA_PEDIDO)
ORDER BY MES;6) Etapa 5 — O “pulo do gato”: novos x recorrentes
Muita queda de faturamento é, na prática:
- menos clientes novos
- ou perda de recorrência
6.1 Clientes novos por mês
SELECT
DATE_TRUNC('month', c.DATA_CADASTRO) AS MES,
COUNT(*) AS NOVOS_CLIENTES
FROM cliente c
GROUP BY DATE_TRUNC('month', c.DATA_CADASTRO)
ORDER BY MES;6.2 Recorrência (clientes que compraram mais de 1x no mês)
SELECT
MES,
COUNT(*) AS QTD_CLIENTES
FROM (
SELECT
DATE_TRUNC('month', p.DATA_PEDIDO) AS MES,
p.ID_CLIENTE,
COUNT(*) AS QTD_PEDIDOS
FROM pedido p
GROUP BY DATE_TRUNC('month', p.DATA_PEDIDO), p.ID_CLIENTE
) t
WHERE t.QTD_PEDIDOS > 1
GROUP BY MES
ORDER BY MES;Risco comum: investigar tudo ao mesmo tempo
Se você tentar olhar:
- produto
- canal
- região
- desconto
- cancelamento
- recorrência
tudo de uma vez…
Você não encontra nada.
O segredo é:
👉 primeiro quantifica, depois localiza, depois explica.
O próximo passo certo
Se você gostou desse mini-case, a melhor forma de evoluir rápido é praticar esse tipo de raciocínio em cenários reais (não em exercício artificial).
É exatamente isso que você encontra na:
🎯 Coleção A Arte da Query — cenários + perguntas reais + prática guiada
📚 Baseoteca SQL — bancos prontos para você rodar essas análises em dados reais (secundário)
0 Comentários