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:

  1. menos pedidos
  2. 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_TRUNC varia 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)

Tags: |

0 Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Solicitar exportação de dados

Use este formulário para solicitar uma cópia de seus dados neste site.

Solicitar a remoção de dados

Use este formulário para solicitar a remoção de seus dados neste site.

Solicitar retificação de dados

Use este formulário para solicitar a retificação de seus dados neste site. Aqui você pode corrigir ou atualizar seus dados, por exemplo.

Solicitar cancelamento de inscrição

Use este formulário para solicitar a cancelamento da inscrição do seu e-mail em nossas listas de e-mail.