Blog · RevOps e dados

SQL para marketing e vendas: comece por estas seis consultas

Seis consultas SQL que cobrem a maior parte das perguntas de marketing e vendas: funil, coorte, CAC por canal, retenção, ranking e janela de atribuição.

16 de março de 2026 · 9 min de leitura

Resumo

  • Você não precisa de SQL avançado: SELECT, WHERE, GROUP BY, JOIN e funções de janela cobrem quase tudo.
  • Agregação por coorte é o padrão mais útil e o menos usado por times de marketing.
  • Sempre valide o total da sua consulta contra uma fonte reconhecida antes de apresentar.
  • Documente a definição de cada métrica junto da query, não em um slide separado.

Depender de outra pessoa para responder "quanto converteu por canal no trimestre?" custa dias. Seis padrões de consulta resolvem a maior parte das perguntas de um time de receita.

1. Volume por dimensão e período

SELECT canal, DATE_TRUNC('month', criado_em) AS mes, COUNT(*) AS leads
FROM leads
WHERE criado_em >= '2026-01-01'
GROUP BY 1, 2
ORDER BY 2, 3 DESC;

O feijão com arroz: contar algo, quebrado por uma dimensão e por tempo.

2. Funil em uma linha por etapa

SELECT
  COUNT(*) AS leads,
  COUNT(*) FILTER (WHERE virou_mql) AS mqls,
  COUNT(*) FILTER (WHERE teve_reuniao) AS reunioes,
  COUNT(*) FILTER (WHERE virou_cliente) AS clientes
FROM leads
WHERE criado_em BETWEEN '2026-01-01' AND '2026-03-31';

Contar condicionalmente evita cinco consultas separadas que nunca batem entre si.

3. Coorte de retenção

SELECT
  DATE_TRUNC('month', c.assinou_em) AS coorte,
  DATE_PART('month', AGE(f.mes, c.assinou_em)) AS mes_relativo,
  COUNT(DISTINCT f.cliente_id) AS ativos
FROM faturas f
JOIN clientes c ON c.id = f.cliente_id
GROUP BY 1, 2
ORDER BY 1, 2;

É a base da curva de retenção e do LTV por safra.

4. CAC por canal

SELECT i.canal,
       SUM(i.valor) AS investimento,
       COUNT(DISTINCT c.id) AS novos_clientes,
       SUM(i.valor) / NULLIF(COUNT(DISTINCT c.id), 0) AS cac
FROM investimentos i
LEFT JOIN clientes c
  ON c.canal_origem = i.canal
 AND c.assinou_em BETWEEN i.mes AND i.mes + INTERVAL '90 days'
GROUP BY 1;

Note a janela de 90 dias: é a defasagem do ciclo de vendas dentro da própria consulta.

5. Ranking com função de janela

SELECT vendedor, cliente, valor,
       ROW_NUMBER() OVER (PARTITION BY vendedor ORDER BY valor DESC) AS posicao
FROM negocios
WHERE status = 'ganho';

Funções de janela resolvem "os três maiores por grupo" sem subconsultas aninhadas.

6. Primeiro e último toque

SELECT DISTINCT ON (lead_id)
       lead_id, canal, ocorrido_em
FROM toques
ORDER BY lead_id, ocorrido_em ASC;

Troque ASC por DESC e você tem o último toque. Duas consultas quase idênticas e o começo de um modelo de atribuição próprio.

Três hábitos que evitam vergonha

  1. 1Valide o total contra uma fonte que a empresa já reconhece (ERP, painel financeiro) antes de apresentar.
  2. 2Cuidado com JOIN que duplica linhas: sempre confira a contagem antes e depois do join.
  3. 3Guarde a definição junto da query. A métrica é a query, não o slide.

Para treinar sem instalar nada, o SQL Lab da plataforma roda consultas em um banco de exemplo com tabelas de leads, negócios e faturas.

Perguntas frequentes

Preciso saber SQL para trabalhar com marketing?
Não é obrigatório, mas encurta drasticamente o tempo entre a pergunta e a resposta. SELECT, WHERE, GROUP BY, JOIN e funções de janela cobrem a maior parte das perguntas de um time de receita.
Qual o erro mais comum de quem começa em SQL?
JOIN que duplica linhas e infla totais. Sempre compare a contagem de registros antes e depois do join e valide o resultado contra uma fonte reconhecida.

Quer aplicar isso nos seus números?

Na 4metrics Academy, cada tema vira um módulo de 10 minutos com exemplo do seu segmento, calculadora pronta e atividade prática.

Continue lendo

Montar meu plano grátis

1º módulo liberado · sem cartão