Apresentação
📊 SQL — Essencial
Formato entrevista: Exercícios em pseudo-code ou whiteboard — saber escrever/desenhar a lógica.
Joins
- INNER: Só linhas com match em ambas.
- LEFT: Todas da esquerda + match da direita (NULL se não houver).
- RIGHT: Todas da direita + match da esquerda.
- FULL OUTER: Todas de ambas, NULL onde não há match.
- CROSS: Produto cartesiano (cuidado).
Window Functions
- OVER (PARTITION BY col ORDER BY col): Agregação por partição sem reduzir linhas.
- ROW_NUMBER(), RANK(), DENSE_RANK(): Ordenação dentro da partição.
- LAG(), LEAD(): Acesso a linhas anteriores/seguintes.
- Exemplo:
SELECT *, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY date DESC) as rn— última compra por cliente.
Padrões para migração (whiteboard)
Deduplicação (top 1 por grupo)
WITH ranked AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY updated_at DESC) as rn
FROM source
)
SELECT * FROM ranked WHERE rn = 1
Top-N por grupo
-- Top 3 vendas por cliente
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY amount DESC) as rn
FROM sales
) WHERE rn <= 3
Comparação período a período (LAG)
SELECT date, amount, LAG(amount) OVER (ORDER BY date) as prev_amount
FROM daily_sales
Zona de prática
Sem perguntas. Clica em Editar para adicionar.
Desafios de código
Deduplicação (pseudo-code SQL)
Escreve a lógica para deduplicar por customer_id, mantendo a última transação (por date).
Top 3 por grupo (pseudo-code)
Top 3 produtos mais vendidos por categoria. Escreve a lógica SQL.