Os três numeram linhas dentro de uma janela. O ROW_NUMBER dá a cada linha um número sequencial único, então os empates são desfeitos de forma arbitrária. O RANK dá o mesmo número às linhas empatadas e depois pula adiante, produzindo 1, 2, 2, 4. O DENSE_RANK dá o mesmo número às empatadas sem pular, produzindo 1, 2, 2, 3. Use ROW_NUMBER para deduplicação e RANK ou DENSE_RANK para rankings de verdade.
Por que os entrevistadores perguntam isso
É um teste rápido e inequívoco de fluência em SQL, sem espaço para enrolar, e o desdobramento prático importa tanto quanto: escolher uma linha por grupo é tarefa de todo dia e o ROW_NUMBER é a ferramenta certa para isso. Os entrevistadores também querem que você note que o ROW_NUMBER não é determinístico em empates, a não ser que o seu ORDER BY inclua um critério de desempate explícito.
Como estruturar sua resposta
- Diga o comportamento de numeração de cada um com o exemplo 1, 2, 2, 4.
- Associe cada função à tarefa para a qual ela é a certa.
- Alerte que o ROW_NUMBER em empates precisa de um critério de desempate determinístico.
- Mostre o padrão clássico para pegar a linha mais recente por grupo.
Exemplo de resposta
O ROW_NUMBER sempre dá inteiros distintos, então duas linhas empatadas ainda recebem 1 e 2 na ordem que o motor quiser. O RANK dá 1 para as duas e depois pula para 3. O DENSE_RANK dá 1 para as duas e continua no 2. Na prática eu uso ROW_NUMBER muito mais que os outros dois, porque o trabalho mais comum é deduplicação: particionar por customer_id, ordenar por updated_at decrescente e pegar onde row_number é igual a 1 para ter o registro mais recente por cliente. Se eu estou montando um top dez em que empates deveriam dividir a posição, aí é DENSE_RANK. A pegadinha do ROW_NUMBER é o determinismo. Se o updated_at é idêntico em duas linhas, qual delas você mantém pode mudar entre execuções, e eu já vi um dashboard oscilar entre dois valores exatamente por isso. Então eu adiciono uma segunda chave de ordenação, normalmente a chave primária, para deixar estável e reproduzível.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- Como você pegaria os três principais produtos por categoria?
- O que acontece com o ROW_NUMBER se duas linhas têm valores de ordenação idênticos?
- Como o NTILE difere desses três?
Mais perguntas para Analista de Dados
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas