Funções Janela SQL: Dicas para TPMs
# Funções Janela SQL: Dicas para TPMs
Funções janela SQL são cruciais para análises avançadas em bancos de dados. Para candidatos a Technical Program Managers em startups de IA, dominar essas funções pode ser um diferencial importante.
O que você precisa saber
As principais funções janela que você deve conhecer são: ROW_NUMBER, RANK, DENSE_RANK, LAG, e LEAD.
ROW_NUMBER
A função ROW_NUMBER atribui um número único sequencial a cada linha dentro de uma partição de uma tabela.
RANK
A função RANK atribui uma classificação a cada linha dentro de uma partição, considerando a ordem especificada. Linhas com o mesmo valor recebem o mesmo ranking.
DENSE_RANK
A função DENSE_RANK funciona como o RANK, mas sem lacunas nos rankings. Mesmo se houver várias linhas com o mesmo valor, a lacuna não aparece.
LAG
A função LAG permite acessar dados de uma linha anterior sem usar uma junção self-join. Isso é útil para comparações entre linhas adjacentes.
LEAD
A função LEAD é a oposto do LAG, permitindo acessar dados de uma linha seguinte.
Exercícios Práticos
Exemplo 1: ROW_NUMBER
Suponha que você tenha uma tabela de vendas e quer atribuir um número sequencial para cada venda por mês.
``sql
SELECT venda_id, cliente_id, data_venda,
ROW_NUMBER() OVER (PARTITION BY EXTRACT(MONTH FROM data_venda) ORDER BY venda_id) AS numero_sequencial
FROM vendas;
`
Exemplo 2: RANK
Suponha que você queira classificar os clientes por valor total de vendas no mês passado.
`sql
SELECT cliente_id, SUM(valor_venda) AS total_vendas,
RANK() OVER (ORDER BY SUM(valor_venda) DESC) AS classificacao
FROM vendas
WHERE EXTRACT(MONTH FROM data_venda) = EXTRACT(MONTH FROM CURRENT_DATE - INTERVAL '1 month')
GROUP BY cliente_id;
`
Exemplo 3: DENSE_RANK
Suponha que você queira uma classificação sem lacunas para os clientes.
`sql
SELECT cliente_id, SUM(valor_venda) AS total_vendas,
DENSE_RANK() OVER (ORDER BY SUM(valor_venda) DESC) AS classificacao_denso
FROM vendas
WHERE EXTRACT(MONTH FROM data_venda) = EXTRACT(MONTH FROM CURRENT_DATE - INTERVAL '1 month')
GROUP BY cliente_id;
`
Exemplo 4: LAG
Suponha que você queira comparar o valor da venda atual com o da venda anterior.
`sql
SELECT venda_id, cliente_id, valor_venda,
valor_venda_anterior = LAG(valor_venda) OVER (PARTITION BY cliente_id ORDER BY venda_id)
FROM vendas;
`
Exemplo 5: LEAD
Suponha que você queira comparar o valor da venda atual com o da venda seguinte.
`sql
SELECT venda_id, cliente_id, valor_venda,
valor_venda_proxima = LEAD(valor_venda) OVER (PARTITION BY cliente_id ORDER BY venda_id)
FROM vendas;
``
O que os gerentes de contratação procuram
Os gerentes de contratação buscam candidatos que não apenas entendam conceitos avançados de SQL, mas também possam aplicar essas habilidades em contextos práticos. Eles querem ver como você pode usar funções janela para resolver problemas complexos de dados.
Erros Comuns a Evitar
- Subestimar a complexidade: Nem sempre é fácil usar funções janela. Não subestime a importância de entender as cláusulas PARTITION BY e ORDER BY.
- Confundições entre RANK e DENSE_RANK: Ambas são úteis, mas servem para diferentes propósitos. Certifique-se de entender quando usar uma em detrimento à outra.
- Uso incorreto do LAG e LEAD: Estes são poderosos, mas podem gerar resultados confusos se não forem usados corretamente.
- Falta de testes: Sempre teste suas consultas com dados reais para garantir que elas estão funcionando conforme o esperado.
- Negligenciar a performance: Com funções janela, o desempenho pode se tornar um problema com grandes conjuntos de dados. Sempre pense em como otimizar suas consultas.
Com essas dicas, você estará bem preparado para se destacar em entrevistas de TPM em startups de IA. Boa sorte!